@@ -582,10 +582,38 @@ tabutils._tabOpeningOptions = function() {
582
582
let win = aWebProgress . DOMWindow ;
583
583
win . _closeTimer = win . setTimeout ( function ( ) {
584
584
this . mTabBrowser . isBlankTab ( this . mTab ) && this . mTabBrowser . removeTab ( this . mTab ) ;
585
- } . bind ( this ) , 250 ) ;
585
+ } . bind ( this ) , 750 ) ;
586
586
}
587
587
} ) ;
588
588
589
+ let tmp = { } ;
590
+ Cu . import ( "resource://gre/modules/DownloadLastDir.jsm" , tmp ) ;
591
+
592
+ if ( tmp . DownloadLastDir && // Bug 722995 [Fx19]
593
+ tmp . DownloadLastDir . prototype . getFileAsync && // Bug 854299 [Fx23]
594
+ tmp . DownloadLastDir . prototype . getFileAsync . name != "TU_getFileAsync" )
595
+ tmp . DownloadLastDir . prototype . getFileAsync = ( function ( ) {
596
+ let getFileAsync = tmp . DownloadLastDir . prototype . getFileAsync ;
597
+ return function TU_getFileAsync ( aURI , aCallback ) {
598
+ let win = this . window ;
599
+ if ( win . _closeTimer ) {
600
+ win . clearTimeout ( win . _closeTimer ) ;
601
+ win . _closeTimer = null ;
602
+
603
+ aCallback = ( function ( ) {
604
+ let lastDirCallback = aCallback ;
605
+ return function TU_LastDirCallback ( lastDir ) {
606
+ lastDirCallback ( lastDir ) ;
607
+ if ( ! win . closed ) {
608
+ win . setTimeout ( win . close , 250 ) ;
609
+ }
610
+ } ;
611
+ } ) ( ) ;
612
+ }
613
+ getFileAsync . apply ( this , arguments ) ;
614
+ } ;
615
+ } ) ( ) ;
616
+
589
617
//在当前标签页的右侧打开新标签页
590
618
//连续打开后台标签时保持原有顺序
591
619
TU_hookCode ( "gBrowser.addTab" ,
@@ -602,7 +630,7 @@ tabutils._tabOpeningOptions = function() {
602
630
603
631
if ( TU_getPref ( "extensions.tabutils.openTabNext.keepOrder" , true ) ) {
604
632
let tab = lastRelatedTab . nextSibling ;
605
- let panelId = this . mCurrentTab . linkedPanel ;
633
+ let panelId = this . mCurrentTab . linkedPanel + "#" ;
606
634
for ( ; tab && tab . pinned ; tab = tab . nextSibling ) ;
607
635
for ( ; tab && tab . getAttribute ( "opener" ) == panelId && tab != t && ( ! willStack || shouldStack ( tab ) ) ; tab = tab . nextSibling )
608
636
lastRelatedTab = tab ;
@@ -624,7 +652,7 @@ tabutils._tabOpeningOptions = function() {
624
652
default : return false ; //None
625
653
}
626
654
} ) ( ) ) {
627
- aTab . setAttribute ( "opener" , this . mCurrentTab . linkedPanel ) ;
655
+ aTab . setAttribute ( "opener" , this . mCurrentTab . linkedPanel + "#" ) ;
628
656
}
629
657
} ) ;
630
658
@@ -766,7 +794,7 @@ tabutils._tabClosingOptions = function() {
766
794
767
795
//关闭标签页时选择亲属标签
768
796
TU_hookCode ( "gBrowser.onTabSelect" , "}" , function ( ) {
769
- var panelId = aTab . linkedPanel ;
797
+ var panelId = aTab . linkedPanel + "#" ;
770
798
Array . forEach ( this . visibleTabs , function ( aTab ) {
771
799
if ( aTab . getAttribute ( "opener" ) . startsWith ( panelId ) )
772
800
aTab . setAttribute ( "opener" , panelId + ( + aTab . getAttribute ( "opener" ) . slice ( panelId . length ) + 1 ) ) ;
@@ -776,7 +804,7 @@ tabutils._tabClosingOptions = function() {
776
804
TU_hookCode ( "gBrowser.onTabClose" , "}" , function ( ) {
777
805
if ( aTab . hasAttribute ( "opener" ) ) {
778
806
let opener = aTab . getAttribute ( "opener" ) ;
779
- let panelId = aTab . linkedPanel ;
807
+ let panelId = aTab . linkedPanel + "#" ;
780
808
Array . forEach ( this . visibleTabs , function ( aTab ) {
781
809
if ( aTab . getAttribute ( "opener" ) . startsWith ( panelId ) )
782
810
aTab . setAttribute ( "opener" , opener ) ;
@@ -794,8 +822,8 @@ tabutils._tabClosingOptions = function() {
794
822
bTab = this . mCurrentTab ;
795
823
796
824
return aTab . hasAttribute ( "opener" ) && aTab . getAttribute ( "opener" ) == bTab . getAttribute ( "opener" )
797
- || aTab . getAttribute ( "opener" ) . startsWith ( bTab . linkedPanel )
798
- || bTab . getAttribute ( "opener" ) . startsWith ( aTab . linkedPanel ) ;
825
+ || aTab . getAttribute ( "opener" ) . startsWith ( bTab . linkedPanel + "#" )
826
+ || bTab . getAttribute ( "opener" ) . startsWith ( aTab . linkedPanel + "#" ) ;
799
827
} ;
800
828
801
829
//关闭标签页时选择上次浏览的标签
@@ -2360,17 +2388,11 @@ tabutils._miscFeatures = function() {
2360
2388
switch ( sheet . href ) {
2361
2389
case "chrome://browser/skin/browser.css" :
2362
2390
for ( let cssRule of Array . slice ( sheet . cssRules ) ) {
2363
- if ( / > .t a b b r o w s e r - t a b / . test ( cssRule . selectorText ) ) {
2364
- tabutils . insertRule ( cssRule . cssText . replace ( RegExp . lastMatch , ".tabbrowser-tab" ) ) ;
2365
- continue ;
2366
- }
2367
-
2368
- if ( / > .t a b b r o w s e r - a r r o w s c r o l l b o x > .a r r o w s c r o l l b o x - s c r o l l b o x / . test ( cssRule . selectorText ) ) {
2369
- tabutils . insertRule ( cssRule . cssText . replace ( RegExp . lastMatch , "#PinnedTabsBarItems" ) ) ;
2370
- continue ;
2371
- }
2372
-
2373
2391
switch ( cssRule . selectorText ) {
2392
+ case "#tabbrowser-tabs[positionpinnedtabs] > .tabbrowser-tab[pinned]:before" : // Bug 877368 [Fx29]
2393
+ case "#tabbrowser-tabs[positionpinnedtabs] > .tabbrowser-tab[pinned]::before" :
2394
+ tabutils . insertRule ( cssRule . cssText . replace ( "#tabbrowser-tabs[positionpinnedtabs] >" , "" ) ) ;
2395
+ break ;
2374
2396
case ".tabbrowser-arrowscrollbox > .arrowscrollbox-scrollbox" :
2375
2397
tabutils . insertRule ( cssRule . cssText . replace ( cssRule . selectorText , ".tabbrowser-tabs[orient='horizontal']:not([overflow]):not([multirow]) $&" ) )
2376
2398
. style . MozMarginStart = "-" + cssRule . style . MozPaddingStart ;
@@ -2382,6 +2404,16 @@ tabutils._miscFeatures = function() {
2382
2404
case ".tab-throbber[pinned], .tab-icon-image[pinned], .tabs-newtab-button > .toolbarbutton-icon" :
2383
2405
tabutils . insertRule ( cssRule . cssText . replace ( cssRule . selectorText , '.tabbrowser-tabs[orient="horizontal"] > .tabbrowser-tab[faviconized] :-moz-any(.tab-throbber, .tab-icon-image)' ) ) ;
2384
2406
break ;
2407
+ default :
2408
+ if ( / > .t a b b r o w s e r - t a b / . test ( cssRule . selectorText ) ) {
2409
+ tabutils . insertRule ( cssRule . cssText . replace ( RegExp . lastMatch , ".tabbrowser-tab" ) ) ;
2410
+ continue ;
2411
+ }
2412
+
2413
+ if ( / > .t a b b r o w s e r - a r r o w s c r o l l b o x > .a r r o w s c r o l l b o x - s c r o l l b o x / . test ( cssRule . selectorText ) ) {
2414
+ tabutils . insertRule ( cssRule . cssText . replace ( RegExp . lastMatch , "#PinnedTabsBarItems" ) ) ;
2415
+ continue ;
2416
+ }
2385
2417
}
2386
2418
}
2387
2419
break ;
@@ -2714,6 +2746,11 @@ tabutils._hideTabBar = function() {
2714
2746
toolbarNodes . push ( tabsToolbar ) ;
2715
2747
} ) ;
2716
2748
2749
+ if ( "getTogglableToolbars" in window ) // Bug 940669 [Fx29]
2750
+ TU_hookCode ( "getTogglableToolbars" , / (? = .* r e t u r n .* ) / , function ( ) {
2751
+ toolbarNodes = [ ...new Set ( toolbarNodes ) ] ;
2752
+ } ) ;
2753
+
2717
2754
TU_hookCode ( "setToolbarVisibility" , / .* s e t A t t r i b u t e .* / , 'if (toolbar.id == "TabsToolbar") gBrowser.mTabContainer.visible = isVisible; else $&' ) ;
2718
2755
TU_hookCode ( "gBrowser.mTabContainer.updateVisibility" , "{" , 'if (!TU_getPref("browser.tabs.autoHide")) return;' ) ;
2719
2756
} ;
@@ -2785,7 +2822,7 @@ tabutils._undoCloseTabButton = function() {
2785
2822
document . getElementById ( "History:UndoCloseTab" ) . removeAttribute ( "disabled" ) ;
2786
2823
gBrowser . _lastClosedTabsCount = null ;
2787
2824
} ;
2788
- //tabutils.updateUndoCloseTabCommand( );
2825
+ document . getElementById ( "History:UndoCloseTab" ) . setAttribute ( "disabled" , true ) ;
2789
2826
TU_hookCode ( "gBrowser.onTabClose" , "}" , "tabutils.updateUndoCloseTabCommand();" ) ;
2790
2827
TU_hookCode ( "gBrowser.onTabRestoring" , "}" , "tabutils.updateUndoCloseTabCommand();" ) ;
2791
2828
TU_hookCode ( "gSessionHistoryObserver.observe" , "}" , "tabutils.updateUndoCloseTabCommand();" ) ;
0 commit comments