Changeset 547

Show
Ignore:
Timestamp:
2007-07-27 02:58:36 (1 year ago)
Author:
MaierMan
Message:

fixing #107: closeTab feature now works for all for multiple tabs
Removed some obsolete code as well

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/chrome/content/common/overlayFunctions.js

    r492 r547  
    666666        }, 
    667667        removeTab: function WM_removeTab(url) { 
    668  
    669                 var useRM = false; 
    670                 try { 
    671                         var ver = Components.classes["@mozilla.org/xre/app-info;1"] 
    672                                 .getService(Components.interfaces.nsIXULAppInfo) 
    673                                 .platformVersion; 
    674                         var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"] 
    675                                 .getService(Components.interfaces.nsIVersionComparator); 
    676                         useRM = versionChecker.compare(ver, "1.8") < 0; 
    677                 } catch (ex) { 
    678                         // nothing to do here. 
    679                         // seems to be an old version of Gecko/XRE. 
    680                 } 
    681                 var enumerator = Components.classes["@mozilla.org/appshell/window-mediator;1"] 
    682                         .getService(Components.interfaces.nsIWindowMediator) 
    683                         .getEnumerator("navigator:browser"); 
    684  
    685                 var chk = function(tab, url) { 
    686                         if (tab.currentURI.spec == url || tab.contentWindow.location == url) { 
    687                                 return tab; 
    688                         } 
    689                         var frames = tab.contentWindow.frames; 
     668                function chk(browser, url) { 
     669                        if (browser.currentURI.spec == url) { 
     670                                return true; 
     671                        } 
     672                        var frames = browser.contentWindow.frames; 
    690673                        if (frames && frames.length) { 
    691674                                for (var i = 0; i < frames.length; i++) { 
    692675                                        if (frames[i].location && frames[i].location == url) { 
    693                                                 return tab
     676                                                return true
    694677                                        } 
    695678                                } 
    696679                        } 
    697                         return null; 
    698                 }; 
    699  
    700                 // Check each browser instance for our URL 
    701                 var numBrowsers = 0, numTabs = 0; 
    702                 var tab = null, browser = null; 
    703  
     680                        return false; 
     681                };               
     682                 
     683                var enumerator = this._m.getEnumerator("navigator:browser"); 
    704684                while (enumerator.hasMoreElements()) { 
    705685                        var win = enumerator.getNext(); 
    706                         browser = win.getBrowser(); 
    707  
    708                         ++numBrowsers; 
    709                         numTabs = browser.browsers.length; 
    710  
    711                         // likely its the selected tab. 
    712                         if ((tab = chk(browser.selectedBrowser, url)) != null) { 
    713                                 break; 
    714                         } 
    715                         // Check each tab of this browser instance 
    716                         for (var i = 0; i < numTabs && !tab; ++i) { 
    717                                 tab = chk(browser.getBrowserAtIndex(i), url); 
    718                         } 
    719                         if (tab) { 
    720                                 break; 
    721                         } 
    722                 } 
    723  
    724                 // nothing found :p 
    725                 if (!tab)       { 
    726                         return; 
    727                 } 
    728  
    729                 // newer gecko or more than one tab in window 
    730                 if (useRM || numTabs > 1) { 
    731                         browser.removeTab(tab); 
    732                 } 
    733                 // last tab, more windows, old gecko => close 
    734                 else if (numBrowsers > 1 || enumerator.hasMoreElements()) { 
    735                         win.close(); 
    736                 } 
    737                 // old gecko, last tab, last window 
    738                 else { 
    739                         // this is the 1.8.0 way 
    740                         browser.addTab('about:blank'); 
    741                         browser.removeTab(tab); 
     686                        var browser = win.getBrowser(); 
     687                        for (var i = browser.browsers.length - 1; i >= 0; --i) { 
     688                                if (chk(browser.getBrowserAtIndex(i), url)) { 
     689                                        browser.removeTab(browser.mTabContainer.childNodes[i]); 
     690                                        return; 
     691                                } 
     692                        } 
    742693                } 
    743694        }