[Pkg-mozext-commits] [tree-style-tab] 01/04: Imported Upstream version 0.15.20150902901
Ximin Luo
infinity0 at debian.org
Mon Oct 12 11:15:25 UTC 2015
This is an automated email from the git hooks/post-receive script.
infinity0 pushed a commit to branch master
in repository tree-style-tab.
commit 404a489a6eb7021dd69030b2b2f99618f167f771
Author: Ximin Luo <infinity0 at debian.org>
Date: Mon Oct 12 12:57:54 2015 +0200
Imported Upstream version 0.15.20150902901
---
META-INF/manifest.mf | 838 +++++++++++++++++++++
META-INF/mozilla.rsa | Bin 0 -> 4189 bytes
META-INF/mozilla.sf | 4 +
content/treestyletab/bookmarksOverlay.js | 21 +-
content/treestyletab/bookmarksOverlayEditable.js | 79 +-
content/treestyletab/config.js | 54 +-
content/treestyletab/config.xul | 49 ++
content/treestyletab/content-utils-autohide.js | 2 +-
content/treestyletab/license.txt | 1 +
content/treestyletab/treestyletab.js | 8 +-
content/treestyletab/windowHelper.js | 66 +-
content/treestyletab/windowHelperHacks.js | 45 +-
defaults/preferences/treestyletab.js | 2 +
install.rdf | 19 +-
locale/cs/treestyletab/treestyletab.dtd | 4 +
locale/da-DK/treestyletab/treestyletab.dtd | 4 +
locale/de-DE/treestyletab/treestyletab.dtd | 4 +
locale/en-US/treestyletab/treestyletab.dtd | 4 +
locale/es-ES/treestyletab/treestyletab.dtd | 4 +
locale/fr-FR/treestyletab/treestyletab.dtd | 4 +
locale/it-IT/treestyletab/treestyletab.dtd | 4 +
locale/ja/treestyletab/treestyletab.dtd | 4 +
locale/pl/treestyletab/treestyletab.dtd | 4 +
locale/ru/treestyletab/treestyletab.dtd | 4 +
locale/sv-SE/treestyletab/treestyletab.dtd | 4 +
locale/zh-CN/treestyletab/treestyletab.dtd | 4 +
locale/zh-TW/treestyletab/treestyletab.dtd | 4 +
modules/autoHide.js | 58 +-
modules/base.js | 97 +--
modules/browser.js | 275 ++++---
modules/browserUIShowHideObserver.js | 55 +-
modules/contentBridge.js | 27 +-
modules/lib/animationManager.js | 14 +-
modules/lib/visuallyselectedTabs.jsm | 67 ++
modules/tabbarDNDObserver.js | 11 +-
modules/utils.js | 41 +
modules/window.js | 21 +-
skin/classic/treestyletab/Darwin-styled.css | 10 +-
skin/classic/treestyletab/Linux-config.css | 12 +-
skin/classic/treestyletab/Linux-styled.css | 4 +-
skin/classic/treestyletab/WINNT-styled.css | 8 +-
skin/classic/treestyletab/base.css | 8 +-
skin/classic/treestyletab/metal/base.css | 8 +-
skin/classic/treestyletab/metal/tab.css | 88 +--
skin/classic/treestyletab/sidebar/sidebar.css | 98 +--
skin/classic/treestyletab/square/Darwin.css | 4 +-
skin/classic/treestyletab/square/base.css | 82 +-
.../treestyletab/square/disable-closebox-bg.css | 2 +-
skin/classic/treestyletab/square/mixed.css | 26 +-
skin/classic/treestyletab/square/tab-surface.css | 4 +-
skin/classic/treestyletab/square/vertigo.css | 42 +-
skin/classic/treestyletab/tmp.css | 2 +-
skin/classic/treestyletab/twisty/twisty.css | 6 +-
skin/classic/treestyletab/ui-australis.css | 6 +
skin/classic/treestyletab/ui-base.css | 119 +--
55 files changed, 1822 insertions(+), 613 deletions(-)
diff --git a/META-INF/manifest.mf b/META-INF/manifest.mf
new file mode 100644
index 0000000..8cd9d38
--- /dev/null
+++ b/META-INF/manifest.mf
@@ -0,0 +1,838 @@
+Manifest-Version: 1.0
+
+Name: install.rdf
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: XmdqNUkTM6QdwsQ5YvcjPw==
+SHA1-Digest: YAn17jTjifr/5uDzOWuTMkgbS24=
+
+Name: chrome.manifest
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: MGoVXpTug24gycfhAQt3yQ==
+SHA1-Digest: 6ajkbSBG0SEgLuGzxZ+ZxXaUhoo=
+
+Name: icon.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: b26p1vuhLB2vYtkJ0EpFZg==
+SHA1-Digest: T9f7i8A7iAz/ElpA361lLRpnbWc=
+
+Name: components/AboutGroup.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: D+AXOvn4yNMXf8GhIKbFrA==
+SHA1-Digest: XLM7zjvCkIi09SoAGOVOZdeQofY=
+
+Name: content/treestyletab/bookmarksOverlay.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: a1UScbFacLdf3bGkQHgZVg==
+SHA1-Digest: akG9SMpPnjkZ2aci1msbsa34ymc=
+
+Name: content/treestyletab/bookmarksOverlay.xul
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: aw8atg7bu14/W1Crfty5/Q==
+SHA1-Digest: W20IiyleTVAkp1ui/2jZZLRJPvU=
+
+Name: content/treestyletab/bookmarksOverlayEditable.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: y+8JAVdPMb4so6IEvtgzTw==
+SHA1-Digest: /V6d117O8c9Qgt7NoCuVRN2bOF0=
+
+Name: content/treestyletab/bookmarksOverlayEditable.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 1OUCn+P21t3cQaO4Zjc3fw==
+SHA1-Digest: LMw7a9VHhMRD5D+gBKwYQBNQjWE=
+
+Name: content/treestyletab/bookmarksOverlayEditable.xul
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: xw2+1EFpMj/QoZzNOit9iw==
+SHA1-Digest: DoFHkl8xDTFaUnc9oQcEXOTSg+A=
+
+Name: content/treestyletab/config.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: CQeMI6LnYw01DCeicW8Zaw==
+SHA1-Digest: ougZFbteusnzVn8djm/xTObCf4Y=
+
+Name: content/treestyletab/config.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: VIC4VobVhIjyRGReHCEikw==
+SHA1-Digest: LSm4XQfNAqRWieDG2oKRk54Rrh8=
+
+Name: content/treestyletab/config.xul
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 5ra/v6hW+mpMAh4cvWiz3Q==
+SHA1-Digest: OUv3S1ilPAxoEsF/3yw6g0Gh9OA=
+
+Name: content/treestyletab/content-utils-autohide.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 5LerXpT+fFUV2k1YOWLOCw==
+SHA1-Digest: UoiQ5kghSuZB2O1NOtmcO82G6ZY=
+
+Name: content/treestyletab/group.xul
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 36AhehtnHOpGrElzTkAIzQ==
+SHA1-Digest: rrjIlOUkUzJsucg+fWIEE+E87n8=
+
+Name: content/treestyletab/hide-embed.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: sm1uHHT3GIl7tIYUz8oS5A==
+SHA1-Digest: dVIKETt9CnpIKynmf5iCpf1jDNo=
+
+Name: content/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ks0H9N1HwtHOGFBceqqXLA==
+SHA1-Digest: EeTFV+ifwWkwaWvQiix88l8YDtw=
+
+Name: content/treestyletab/multipletabConfigOverlay.xul
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: AI3+5oxDcuSxtrEn0S4kpQ==
+SHA1-Digest: TQBJwrZ+GwwBSHbAvzc4nnoSahw=
+
+Name: content/treestyletab/treestyletab-tmp.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Kyvx7VXMs8hS4lchMJpfFg==
+SHA1-Digest: dUnh9cVls70LC0cO+AzOTyJ+7Bc=
+
+Name: content/treestyletab/treestyletab.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ckNWCVVeVUwyAE8Ks4gRgA==
+SHA1-Digest: BmB3htcfoWnSKj7KE5BB7Cu9Sec=
+
+Name: content/treestyletab/treestyletab.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ld2sTGlJa+As/xraL/CwOQ==
+SHA1-Digest: LA2MSt95ft6Mt7ufc53o/qq0oew=
+
+Name: content/treestyletab/treestyletab.xml
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 0AJ4PM4kkHzJ6Skr4X5XwQ==
+SHA1-Digest: yI4r2a9JmBDqDI8qcvvn6R1wG4M=
+
+Name: content/treestyletab/treestyletab.xul
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: xLfM8fCGLnpJnylSe29EeA==
+SHA1-Digest: UL5BD1Q3QU5lrlyvVrvvYzxKzpM=
+
+Name: content/treestyletab/windowHelper.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: jNbQDZNTag3AkbZ5qUfYmA==
+SHA1-Digest: C/mp3RdS4rQjkmrKZNS8X0Nly7I=
+
+Name: content/treestyletab/windowHelperHacks.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: +s/LgIomma9/3/NXA4xK1Q==
+SHA1-Digest: rAB+c6L9HAPpCxWS5vcbvorWmNk=
+
+Name: content/treestyletab/res/bookmarkMultipleTabs.xul
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: BxexkR9ZJCUNcfDfbTeB+Q==
+SHA1-Digest: 60fRvXNQIxZszW6dVBK8RGi/StQ=
+
+Name: content/treestyletab/res/bookmarkMultipleTabs_bookmarkPropertiesOv
+ erlay.xul
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: hn+GVG2KuEdIcR6cd+cPVg==
+SHA1-Digest: zvKA9WdbSHU79zF+CwuH41FYeyU=
+
+Name: content/treestyletab/res/icon.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: b26p1vuhLB2vYtkJ0EpFZg==
+SHA1-Digest: T9f7i8A7iAz/ElpA361lLRpnbWc=
+
+Name: content/treestyletab/res/style-flat.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: yJ5Ng9fWzjXWr6rkY5XnxQ==
+SHA1-Digest: 21fjzektvczaL6gg46YsCnDRAoA=
+
+Name: content/treestyletab/res/style-metal.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: VLW3m1DnBgCJe/CwhatjKQ==
+SHA1-Digest: bDERNcMn+q9be5Hl5vpsOTv9+TA=
+
+Name: content/treestyletab/res/style-mixed.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: LQ+cJ4ypxMeOtrIeNb4zow==
+SHA1-Digest: fwP0Sh/HTfPlNLk8Yo4tbQurrHo=
+
+Name: content/treestyletab/res/style-plain.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: V0aScxDL7YeEz66bvCcdcw==
+SHA1-Digest: cGJJiw5nOPZqyXyvliHjM6vUXeY=
+
+Name: content/treestyletab/res/style-sidebar.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: izAqXI+MBl9HnnvYFEElqA==
+SHA1-Digest: APWbsVjSUEXhi5VaXKH7Pxcasn4=
+
+Name: content/treestyletab/res/style-vertigo.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: mC/u1MvEZzc5Nh+0nMb7aQ==
+SHA1-Digest: peni4eoolSuDI/XvU/G+i1dxU9k=
+
+Name: content/treestyletab/res/tabEffects.svg
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 2kuE/MgWKXof3NwEtoMSsw==
+SHA1-Digest: WzGw9OlK27u2qgwpylJvL+GMB9k=
+
+Name: content/treestyletab/res/tabsDragUtils.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: HiAUx9j5fAnkXeYyqQsnTQ==
+SHA1-Digest: GcN7PicYjUYq8jnq5FsdCfJXOvA=
+
+Name: content/treestyletab/res/twisty-modern-b.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ID6G7gfZgFGmzZwpoeCllA==
+SHA1-Digest: MFCsvyhs0G1660rX6nr4BWL3j04=
+
+Name: content/treestyletab/res/twisty-modern-w.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: QnmThqcAkwd6z0QfD0KO+A==
+SHA1-Digest: FkPnIvOMGo/VlOT+KQ3ZqLqi67E=
+
+Name: content/treestyletab/res/twisty-osx.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: fqz2wOoq980SOp/541fdxg==
+SHA1-Digest: ItmS1DcUMeOj+uEjj4c8EIUV664=
+
+Name: content/treestyletab/res/twisty-retro.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: el+RHYOnbah9NusYiqI0wQ==
+SHA1-Digest: q0mYa40sk7KoHzdmK6voR/OuGF8=
+
+Name: defaults/preferences/treestyletab.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 9biMjtnraI40dhAz4IJYYg==
+SHA1-Digest: MkVnqunBxYKr7c8ZcQQ9B0CDcDA=
+
+Name: locale/cs/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: zszUhNCZbsuXrvk0MyGtqw==
+SHA1-Digest: AmPIaBSAXJtd03ZD/LGrxu3FN3Y=
+
+Name: locale/cs/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 9sfrumYnt7wxbY1xgGIYUw==
+SHA1-Digest: xkvWRvqzxe2Ty769R5dCDO/3z7I=
+
+Name: locale/cs/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 1OpIC14m6S/qgYW69Eye+Q==
+SHA1-Digest: WsOdDNLMXoAK20xYSsHEn3TQEmw=
+
+Name: locale/da-DK/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 9OgEctYlcrncB79Zp3Xsyw==
+SHA1-Digest: vjay7k00E2Dhmo0XsTlEeFTRPXI=
+
+Name: locale/da-DK/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Cs5mhbziShKwE3sj9n0HUQ==
+SHA1-Digest: 8MO0+HSwHgb7p7XCn3WCrSHfXso=
+
+Name: locale/da-DK/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Is2C/T/4urDxTo+QeKFPrw==
+SHA1-Digest: ST1q6G8rHvDj78R+2ob8U7WMBdo=
+
+Name: locale/de-DE/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: P1OFa2/VTsD9tBpI1qCeSA==
+SHA1-Digest: CQr1mkH//MpqNCWbLou/CJX2aDk=
+
+Name: locale/de-DE/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Y7bvv6AflqW/1YpSH/y0EA==
+SHA1-Digest: 2uzb1LBxD8JwX5jylDwUfqFqNb8=
+
+Name: locale/de-DE/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 2xWdE6vpVKQOuO4OMCsD7A==
+SHA1-Digest: WaEIjebxJPfTO63MAdAc868HYWQ=
+
+Name: locale/en-US/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: mBjJFiEbKENaR38v2Zi3nw==
+SHA1-Digest: /vNGGzRR58QK5AOQjlorkE5GCAI=
+
+Name: locale/en-US/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ldc81dCNxvzqLjJSmCOTNg==
+SHA1-Digest: suzdF/d1DEkJBDpvaRjChgHD/Ew=
+
+Name: locale/en-US/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: L17tCQGtPt5xUfMg2yEoIA==
+SHA1-Digest: Sc94PktWKzBULitXzUk++VP0TY0=
+
+Name: locale/es-ES/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 4J565KU4rP1YW2Z7FwAmVw==
+SHA1-Digest: OeORv30Cbr8ylQKVbM0O9Y5n+4Y=
+
+Name: locale/es-ES/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: AIljkxD0WFor3cAs7w8VvA==
+SHA1-Digest: KloS63+wkJ7jJ2sqlnAhXjOrEMk=
+
+Name: locale/es-ES/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: fhSY0PSLS1+LW++TcWeCTQ==
+SHA1-Digest: wFbxgi5Ta2nDFmpxoaPTzItQ4uw=
+
+Name: locale/fr-FR/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: QnFbkycbnW1Gsz2FBnB1yg==
+SHA1-Digest: eSqlFr5OnT5gIpY1PF7f/E3bHas=
+
+Name: locale/fr-FR/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 5I8CWMNxf5PHV/yZogeLlA==
+SHA1-Digest: /Qomr6IpER0UvCK/4RmGqe+09HA=
+
+Name: locale/fr-FR/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: x5Pr+hhfhYBMvi7ef+mCyg==
+SHA1-Digest: a72vTBccSDPwd5oGIw1sOAemr6Y=
+
+Name: locale/it-IT/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: fzikcfeUYYGLBHSPKxs+ZQ==
+SHA1-Digest: DqBJQrV8f3tss7fKSnCdeXNIxYs=
+
+Name: locale/it-IT/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Bq7hRx8kdK+bXqOUt0BCmQ==
+SHA1-Digest: iegxPDoHaEHX3tJFp6WZnL3EMCM=
+
+Name: locale/it-IT/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: QR38Juc6mCm6solQWa2xBA==
+SHA1-Digest: bv3khdm86jVIVgEofDTtjZsHIuk=
+
+Name: locale/ja/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: mBjJFiEbKENaR38v2Zi3nw==
+SHA1-Digest: /vNGGzRR58QK5AOQjlorkE5GCAI=
+
+Name: locale/ja/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: O9O7y27oDqxBl8XVjNH5/g==
+SHA1-Digest: AjGpsCyCRsCrYLWO7aOdYadj6X8=
+
+Name: locale/ja/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ty4qq150WIIqHOA4dQL72g==
+SHA1-Digest: tg0cXe32VqIqrm6fXFf2ocalihw=
+
+Name: locale/pl/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: btlopE6fxtFm6BGl2WqSag==
+SHA1-Digest: JwRGjnhAsrasY46ktL+EtP3fxDI=
+
+Name: locale/pl/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: aB7MFn3PfYAa+ojgvYYwGA==
+SHA1-Digest: xlbcom9kY4kLJcsbJy3BrwSLg0s=
+
+Name: locale/pl/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: aXOCIJVBmBnybDOnPlhGRA==
+SHA1-Digest: ydBiJ4Ihh7jxe6uxPl+y+ryyIAE=
+
+Name: locale/ru/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: optA3x911mM29m/ilijA9Q==
+SHA1-Digest: Ewz5/CWtInQDfBCQoje+iGZbjEE=
+
+Name: locale/ru/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: jx81SEEjhZqqTetxx/GvNg==
+SHA1-Digest: qLa7QqLWsojnIkiR7oWo48qhvyA=
+
+Name: locale/ru/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: RvE1DFsb3pKW2EnPbQGwfQ==
+SHA1-Digest: iHK9XGw25Bu3yZgFRrR6IxYRM/Y=
+
+Name: locale/sv-SE/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: u/nBCeYTsPmbIi9OLhk6Bg==
+SHA1-Digest: Zfn4AKRpBe4E44Sg1HIuoxFmif0=
+
+Name: locale/sv-SE/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: sz96FEbaimft0Yh3+b9v8Q==
+SHA1-Digest: fw5oM4sbnYjiBIm0ibMLJQMWq0o=
+
+Name: locale/sv-SE/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ON1qN8ZBQJ+GuSlvljkvPA==
+SHA1-Digest: Ldbw+O4wPpTHxzQYYOI+EnXeGVs=
+
+Name: locale/zh-CN/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Z5mJDGXEoCOvu6WdrlfiBQ==
+SHA1-Digest: CxdX2iIT5cw2WR+1eMh9AA78n+U=
+
+Name: locale/zh-CN/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: zmmEY8SwT0Z8qe2uJ3pjCw==
+SHA1-Digest: LroRpN63Jwc5k4B/ZQFw03Xm9NE=
+
+Name: locale/zh-CN/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Uqt5+pq/jg2Vx2ar82oOkQ==
+SHA1-Digest: gVahm7yzs/TRB+CMvQLFBNT+PEM=
+
+Name: locale/zh-TW/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Ub9HxVsPH7UbfT/o6UPmxg==
+SHA1-Digest: XVqJMKhADCM73LtM7OFthNdECYo=
+
+Name: locale/zh-TW/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: JvAXUOVeEhu84k3Y0UDGmg==
+SHA1-Digest: Brmd1yAUe7SwDPB97WEZtAFzIwY=
+
+Name: locale/zh-TW/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: bop162cseEmMo1bykaAIYA==
+SHA1-Digest: 820CmLC9fE1O0AAZaeKrzW0ER0g=
+
+Name: modules/autoHide.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: T9SAawe0+UOMjMQizNLHDA==
+SHA1-Digest: 8KQ0JqLSzHH1tOjz/1jwh62zwxk=
+
+Name: modules/base.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: q+mYhiRSG/v4AAbkIT4uCQ==
+SHA1-Digest: s804P4dgT5r0jnMU7tBb1JY85p8=
+
+Name: modules/browser.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 992iLJmymDwfBlCenFMYxw==
+SHA1-Digest: HNf1gNRzLl9m9aWjpv6BUf8sOFk=
+
+Name: modules/browserUIShowHideObserver.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 8MSAEZpP7EhsHmIXnjzG7g==
+SHA1-Digest: M3SCb58qeNORSPot1UHe63vyftM=
+
+Name: modules/constants.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 6mbfJ7B8IX8ScrJgjSBh4g==
+SHA1-Digest: LekJDB7P9PtP/J5a+8+FANZtikM=
+
+Name: modules/contentBridge.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: AZB2jQAnxsjypV1umhfEBw==
+SHA1-Digest: HFsqlRnRFb+hIdV7G5+MG3R0QUI=
+
+Name: modules/fullscreenObserver.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: mf/V54u6CtD6V2RFW/WF0Q==
+SHA1-Digest: v6+507G5urrawGK8lQh8JRdrcPo=
+
+Name: modules/fullTooltip.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ShAuksj5Si0Sb0kEe1NwrQ==
+SHA1-Digest: 4DKc57PO/dO2V3oo0aNBOu7Dfkk=
+
+Name: modules/groupTab.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: GdIHZgj3aQMqHtvRhbjv1w==
+SHA1-Digest: LhC5EqN9up0tyG7mzsxUD6ZxxUA=
+
+Name: modules/pseudoTreeBuilder.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 4q0nQ4CIjqaKtkWM3aHsZQ==
+SHA1-Digest: FzFEKrsUgN3ctHxnapuDMhdRXUQ=
+
+Name: modules/tabAttributesObserver.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: V2bHwKcnECwSU9tiBq6oMA==
+SHA1-Digest: s0dTBYAbHaHJl1qosnFeq09v3wE=
+
+Name: modules/tabbarDNDObserver.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: uFs6iCDzp8ZlGMTsVMHM0Q==
+SHA1-Digest: JK+000vzvtosIaUhtvOl+yE5d2Y=
+
+Name: modules/tabpanelDNDObserver.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: D2vLeI9JjyTH0dxUd3YjWw==
+SHA1-Digest: Ev0jhVn62wkkjNSOO5QHtGKBWXU=
+
+Name: modules/themeManager.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: AtFiQr5iJ7aRAIpw3ISe2w==
+SHA1-Digest: qxskOiLU34Yfh6Gxp/2rBD06gIQ=
+
+Name: modules/utils.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: zZ/+U7Sd8RvruD0Mknpl8A==
+SHA1-Digest: sdflsWuengne5M5scHCKGQ2KIWE=
+
+Name: modules/window.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: wxooRnHV0nCp3Bn7DQbN8g==
+SHA1-Digest: CiPCoI2sXL0Yt2kswj/w45/MU38=
+
+Name: modules/lib/animationManager.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: tCTp1R/fbEHkC/s6LAJ+wQ==
+SHA1-Digest: gOzZIMkc9xO9PfqsTDhP2ViCyVw=
+
+Name: modules/lib/autoScroll.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: wR8RRvyDf3rUzLjBt1bsnA==
+SHA1-Digest: pCuyv9MjP2/vihtyX7wv5Uxk/2o=
+
+Name: modules/lib/confirmWithPopup.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: XffmLkDOfTuIK+48IAM4sw==
+SHA1-Digest: aXUJCn5AlQpCzmZRQ/I3czVSNAk=
+
+Name: modules/lib/extensions.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: KNafZne30SXdzyfoGXca6w==
+SHA1-Digest: 3IbYcqoRV/tpDPKB+iE5Y9iCjCo=
+
+Name: modules/lib/inherit.jsm
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: SESkSedzqkncyLXHABiaog==
+SHA1-Digest: NqtEgb7S1xm1jXEOznskOfZk/Sk=
+
+Name: modules/lib/namespace.jsm
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: mkAS2xBrt57mK5w9IuAxdg==
+SHA1-Digest: fr/zTLjmtBm4oo58uVCZUBv+PPs=
+
+Name: modules/lib/prefs.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: kPuMGdq2ki9wgzsdDkHyQw==
+SHA1-Digest: j4nk7SjmRPBtfA9anGuvpEhf4eo=
+
+Name: modules/lib/stringBundle.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: hLRUNAIgENilF2Gnw7P7WQ==
+SHA1-Digest: ajJwI8sQcc4YyKl9ih/Fqzfr0+Q=
+
+Name: modules/lib/UninstallationListener.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: W6mO+4W/jnW4asgnMpJfGA==
+SHA1-Digest: ILq1s7W1VsjNidfgoGrnlHqnp1M=
+
+Name: modules/lib/visuallyselectedTabs.jsm
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: iwd/kfZCQaJsjIkO/emj/A==
+SHA1-Digest: 8xOI2kAUhlzs7UzFQRh5ibWEhDQ=
+
+Name: skin/classic/treestyletab/base.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: k1uSZ/eZnD3dd7dsgBlq2A==
+SHA1-Digest: 52slwwaJwRWyCIa4TWXxoZ2nQBk=
+
+Name: skin/classic/treestyletab/config.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ISwBByAPfmonJOHp/ZiYxw==
+SHA1-Digest: QeZLao3kGNtER/glzLQoSqpzL64=
+
+Name: skin/classic/treestyletab/Darwin-base.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 5CgXLAOGtw6IqY0tQH4FFA==
+SHA1-Digest: /IPmBc5AJPyaoOrhreWArekX2N8=
+
+Name: skin/classic/treestyletab/Darwin-styled.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: hao95egtOAfEnBBZbhKIrg==
+SHA1-Digest: cWHEYEPCm9gaVVwa/EgpfOm09N8=
+
+Name: skin/classic/treestyletab/dummy.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: gQUbzCzxvt83giSwqT4odw==
+SHA1-Digest: uoq1oCgLlTqpdDX/iUbLy7J1Wic=
+
+Name: skin/classic/treestyletab-group-aero/group.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: WAaFV+uAyxEllkfp3nUzOg==
+SHA1-Digest: SfUa64w243Tsw5GuN3o8JahyFjI=
+
+Name: skin/classic/treestyletab-group-basic/group.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: fVTjGUTsV86sIh2ideYUNQ==
+SHA1-Digest: DvaxcjAmPsnt7a1LFCcI+kZ8O4U=
+
+Name: skin/classic/treestyletab/group.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 90uxLtKKwShXcpxAlDs44A==
+SHA1-Digest: z7qNzCAhtrmIXtkGllbGhDnXKDg=
+
+Name: skin/classic/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: YNMSU+FEmPbD4l7BlE+1eg==
+SHA1-Digest: SkZhMKbeatV48RFx9AROoyuLalc=
+
+Name: skin/classic/treestyletab/Linux-base.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: qcqsCQR2mdKUIuZFf9EEgA==
+SHA1-Digest: aQmL/lqslBMfWjHLumKMmUERwjo=
+
+Name: skin/classic/treestyletab/Linux-config.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 4GgEa2Q4LfzLmtkB8N4mGA==
+SHA1-Digest: wpeaGpY/43D1mlvqaTnaC6LQOxk=
+
+Name: skin/classic/treestyletab/Linux-styled.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: zsFVyDG8KmOpsn81LOf0oA==
+SHA1-Digest: qeeZLagzbORE5b8b1TAxnZVS998=
+
+Name: skin/classic/treestyletab/pseudo-tree.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: vladq5shyYibE7GNT5fh0Q==
+SHA1-Digest: oS++SxHpJBVwPdVbO7VHkoGDom4=
+
+Name: skin/classic/treestyletab/tmp.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: G5wUtcKXudEZJ/wSGxmKOw==
+SHA1-Digest: 4P2cq4d8IQDoO1Q8TxiQMbJDvH8=
+
+Name: skin/classic/treestyletab/ui-australis.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: oGWteOCIdGeJh4s1CrodBQ==
+SHA1-Digest: /CcGFdIzQT8ebf8twW9s6P1rRRI=
+
+Name: skin/classic/treestyletab/ui-base.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 5G3HB6CjHahNZTUpbtJsOQ==
+SHA1-Digest: jipVd7r7T1LUwqdguo6WxjwTdkY=
+
+Name: skin/classic/treestyletab/WINNT-base.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: fGHJbWeArBzHuxSsxMgFrA==
+SHA1-Digest: C3bc9mMl9hHyEMFT613jBKtvOqY=
+
+Name: skin/classic/treestyletab/WINNT-styled.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ZpxqhUBoR0T7h7s0EmVSlQ==
+SHA1-Digest: a+t1B8umsGCEeoQW7I3Wc4jajZM=
+
+Name: skin/classic/treestyletab/metal/aero.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: A7jxPPPNUL0FokiUuMG2mA==
+SHA1-Digest: OeNgpLNuSgMsZsZ2yp1YXdy3Fg8=
+
+Name: skin/classic/treestyletab/metal/base.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: VOvt6P5FBvR/oN9iUdQxtQ==
+SHA1-Digest: i2FdF8PL0OCo1dgAI9S+zJmcKn8=
+
+Name: skin/classic/treestyletab/metal/Darwin.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: TZb3EA3nszWCtkHD9aWR5g==
+SHA1-Digest: YQCNXwVHDahH9S9SCdLFvm2afGs=
+
+Name: skin/classic/treestyletab/metal/icon-bg.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: dPlzlNuH44lFR2S41hhIXA==
+SHA1-Digest: RVQ5erPZ39JFpyMJy+JVEPHIHiI=
+
+Name: skin/classic/treestyletab/metal/shadow-active-l.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: mmzCLfQAQMHghi7NL51Slw==
+SHA1-Digest: M7TqKBGWXT9bW34NN+bwM898UJE=
+
+Name: skin/classic/treestyletab/metal/shadow-active-r.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: mB5tgnES7Pkp/lmdd8zwWg==
+SHA1-Digest: b0DAUbFO0NmlfY25pXRZVWFashs=
+
+Name: skin/classic/treestyletab/metal/shadow-inactive-l.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: y9CW0XGWsvn9WejkzjMB7g==
+SHA1-Digest: FsXsOA/7DGUor3REbDYVXknJLn4=
+
+Name: skin/classic/treestyletab/metal/shadow-inactive-r.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 9yag/NWzVKsCaa6jAfraTA==
+SHA1-Digest: TdgxoicqWnwwbzLq+jyiuBGT94M=
+
+Name: skin/classic/treestyletab/metal/tab-active-l.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: B9BZFX0F6XgN1hNnDekmGA==
+SHA1-Digest: n2B+BGWTc7mPc45JyBlQ5HVhoJY=
+
+Name: skin/classic/treestyletab/metal/tab-active-r.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: xr50vqrLVqxSy6uXBjqtvw==
+SHA1-Digest: I18/nxs9m5/ctfU0e7Scn7T710s=
+
+Name: skin/classic/treestyletab/metal/tab-active-selected-l.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: aM+vjSb9B1Hc1dcHzXjPlQ==
+SHA1-Digest: H+w+lhUI3Zdsmuk9YnjkYKtyB6Y=
+
+Name: skin/classic/treestyletab/metal/tab-active-selected-r.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Pb5PisMUoHyG4c6h40AUrw==
+SHA1-Digest: NuatlkwTAYnuy3aXS0ZUgYXjyvI=
+
+Name: skin/classic/treestyletab/metal/tab-inactive-l.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 4SYlZnEf3p5i0nUnP/yQaA==
+SHA1-Digest: +JvVEjfOE9REL23ElSe+Pd6y3Sk=
+
+Name: skin/classic/treestyletab/metal/tab-inactive-r.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: HjcLuFl2y8cHmbVx6AxxEw==
+SHA1-Digest: VAXbrcfJdPh73hhh98Gqd8pZPHo=
+
+Name: skin/classic/treestyletab/metal/tab-inactive-selected-l.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: hlC7QI1Jppv27pbGUB9h1A==
+SHA1-Digest: QqBxmezksTxjCpQ4U4MJAIGUtlU=
+
+Name: skin/classic/treestyletab/metal/tab-inactive-selected-r.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: C/y9xKa3tfUwPLvpR8fUng==
+SHA1-Digest: u2GHUKdU+s+jbRmxFO5motzr4+0=
+
+Name: skin/classic/treestyletab/metal/tab.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: YmpFmTxB1zpZsREL4keWCQ==
+SHA1-Digest: Tb21M1BRk39XZlAirlB+8obOGvg=
+
+Name: skin/classic/treestyletab/sidebar/aero.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: F9WScbg2zch223DQcGT04w==
+SHA1-Digest: JyNb0crV7EsAtaK5f5b9ijNxuek=
+
+Name: skin/classic/treestyletab/sidebar/closetab-white.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ciO9HszpuusTRyytCi0h7w==
+SHA1-Digest: zIIsZqEoP7r2dFivr6FdPbOpx+g=
+
+Name: skin/classic/treestyletab/sidebar/closetab.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: SkYytZq4wqVcKz9SKHSLJA==
+SHA1-Digest: hYhVFQRyWevCLcBSTW1t8dg3cP4=
+
+Name: skin/classic/treestyletab/sidebar/dropmarker.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: G7uqA6OvOUP5hQWk1Dd2Ow==
+SHA1-Digest: 3ySucjnqrJTu7fWRs6EehENF6mk=
+
+Name: skin/classic/treestyletab/sidebar/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: v9Eq0lPqaRSdBuATG2+oxg==
+SHA1-Digest: VNJPj9nckqPyRb2Ff3HWiGPQE58=
+
+Name: skin/classic/treestyletab/sidebar/sidebar.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: xgizmjMioe0U8jjR60gvCA==
+SHA1-Digest: cb+98YrSrq/rVbSDoYhKTVwMKQw=
+
+Name: skin/classic/treestyletab/square/base.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 7elXQXx/AV+21AEq+84dAw==
+SHA1-Digest: T7j8PUzg8peCmHWYmY26cyrDi2w=
+
+Name: skin/classic/treestyletab/square/Darwin.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Sz6fUNU3tE04ONiRaWWnXw==
+SHA1-Digest: zdWU4lsMupZEO1jfw+Uf5/Gmvm0=
+
+Name: skin/classic/treestyletab/square/disable-closebox-bg.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 8LDHw5xvv9yXYLDJCd3SnQ==
+SHA1-Digest: Sw5lpRR7NRMFYCOrR5ghaVmIqNU=
+
+Name: skin/classic/treestyletab/square/dropshadow.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: gH7jMyo0F+YXqQNMCllSOQ==
+SHA1-Digest: JFXwAAnJv/wYcL0MHhTGAnjuV3s=
+
+Name: skin/classic/treestyletab/square/Linux.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: PmtWBEeufSTU3Y5sXve0Xw==
+SHA1-Digest: 49zyBhf9aiIHZ49IHBS8MynbynA=
+
+Name: skin/classic/treestyletab/square/mixed.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 8sL566Kb3Z8Jvn2CiXpzzA==
+SHA1-Digest: AJDQbZMRY8rRlZTXcBV7i2E3sik=
+
+Name: skin/classic/treestyletab/square/newtab-shadow.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: /0+n+HVPH0by9VBCgNuHfA==
+SHA1-Digest: n/wGfo7dGvxTCtwJY8PhOE3bng8=
+
+Name: skin/classic/treestyletab/square/tab-bg-highlighted.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: T6mzHM9ZoEIITc8gz6ZQzA==
+SHA1-Digest: GZWz47jaTHZqDeuxhEev+hIa9/s=
+
+Name: skin/classic/treestyletab/square/tab-bg-hover.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 7adFA8ElKdBMgDrKt8kJMQ==
+SHA1-Digest: s/iupPpsNzXxzBpfnp46eIHe6lI=
+
+Name: skin/classic/treestyletab/square/tab-bg-selected-hover.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: MKuAAKJcABsHs40VUjTYIA==
+SHA1-Digest: Nm/r/tn7kT3Djy8JXfcXpVuBUHY=
+
+Name: skin/classic/treestyletab/square/tab-bg.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 4J6xqMjhCK3wSS7F3A9y0w==
+SHA1-Digest: CTg4j0P/755VUethbwqkLbDrXcI=
+
+Name: skin/classic/treestyletab/square/tab-surface.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: py4qLMM7RcXH+RwIHJE/Xw==
+SHA1-Digest: Ei6AJVrIrnKAL/qew2jLvNgXjWw=
+
+Name: skin/classic/treestyletab/square/vertigo.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: x5bWTAcM++UPB3EJFA3J3A==
+SHA1-Digest: 08KztOOzgQ0M+D/3ayVlOxnPaw4=
+
+Name: skin/classic/treestyletab/twisty/twisty-modern-b-l.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Ye0CPTVUEFYWL+QuYWAxig==
+SHA1-Digest: RdJUOwLPIMtDepUSe2V2rdy8aio=
+
+Name: skin/classic/treestyletab/twisty/twisty-modern-b-r.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: SwrqMx9DnoCHhCBNRLcW6A==
+SHA1-Digest: rVi62rNVpdlxrMcSNDP7DT2xJEs=
+
+Name: skin/classic/treestyletab/twisty/twisty-modern-w-l.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: xBvmfLgkFKRbEi213k5OPA==
+SHA1-Digest: aTZeSy4hEWKS0oG3t6MFl6zhzso=
+
+Name: skin/classic/treestyletab/twisty/twisty-modern-w-r.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: h9jqwqr8/ru4ggQHfesoyQ==
+SHA1-Digest: VaiUeO2f5HpJ8gRSkEBXvoNQL14=
+
+Name: skin/classic/treestyletab/twisty/twisty-osx-l.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: PVWQVxSX840AHjIw1vJIrQ==
+SHA1-Digest: x6xlwSveib8J18nwDFCikmE4zGA=
+
+Name: skin/classic/treestyletab/twisty/twisty-osx-r.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: WtoZwIp1hXyoGoMw7aCd/Q==
+SHA1-Digest: 8pXvMI1cCh1ON69K20rdHOfesMo=
+
+Name: skin/classic/treestyletab/twisty/twisty-retro.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 5jRhJ+QQ0POMUddYnVCTOw==
+SHA1-Digest: eNNNko96Xro/9rJtX8odGQznSq0=
+
+Name: skin/classic/treestyletab/twisty/twisty.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: M05iN3cITW6rRBXYi2jr9w==
+SHA1-Digest: c+CreKZYaFzJ2AacK/QEjvipQ5Y=
+
diff --git a/META-INF/mozilla.rsa b/META-INF/mozilla.rsa
new file mode 100644
index 0000000..3602901
Binary files /dev/null and b/META-INF/mozilla.rsa differ
diff --git a/META-INF/mozilla.sf b/META-INF/mozilla.sf
new file mode 100644
index 0000000..77eea90
--- /dev/null
+++ b/META-INF/mozilla.sf
@@ -0,0 +1,4 @@
+Signature-Version: 1.0
+MD5-Digest-Manifest: b7fHst3iS1XpUeOAFDG0UA==
+SHA1-Digest-Manifest: icaPq7Iu/pZ1EMF/GPzMkCbIWFc=
+
diff --git a/content/treestyletab/bookmarksOverlay.js b/content/treestyletab/bookmarksOverlay.js
index 8bf362a..1270725 100644
--- a/content/treestyletab/bookmarksOverlay.js
+++ b/content/treestyletab/bookmarksOverlay.js
@@ -243,7 +243,7 @@ var TreeStyleTabBookmarksService = inherit(TreeStyleTabService, {
'$1, aFolderTitle$2'
).replace(
'{',
- '{ var TSTTreeStructure = null, TSTPreviousTabs, TSTOpenGroupBookmarkBehavior;'
+ '{ var TSTTreeStructure = null, TSTPreviousTabs, TSTTreeStructureApplied = true, TSTOpenGroupBookmarkBehavior;'
).replace(
'var urls = [];',
'$& var ids = [];'
@@ -258,6 +258,7 @@ var TreeStyleTabBookmarksService = inherit(TreeStyleTabService, {
'var TSTResult = browserWindow.TreeStyleTabBookmarksService.handleTabsOpenProcess(where, aEvent, browserWindow, ids, urls, aFolderTitle);\n' +
'TSTTreeStructure = TSTResult.treeStructure;\n' +
'TSTPreviousTabs = TSTResult.previousTabs;\n' +
+ 'TSTTreeStructureApplied = TSTResult.treeStructureApplied;\n' +
'TSTOpenGroupBookmarkBehavior = TSTResult.behavior;\n' +
'if (typeof replaceCurrentTab != "undefined")\n' +
' replaceCurrentTab = TSTResult.replaceCurrentTab;\n' +
@@ -266,7 +267,13 @@ var TreeStyleTabBookmarksService = inherit(TreeStyleTabService, {
/(\}\)?)$/,
' if (TSTTreeStructure && TSTPreviousTabs) {\n' +
' let tabs = browserWindow.TreeStyleTabService.getNewTabsFromPreviousTabsInfo(browserWindow.gBrowser, TSTPreviousTabs);\n' +
- ' browserWindow.TreeStyleTabService.applyTreeStructureToTabs(tabs, TSTTreeStructure, TSTOpenGroupBookmarkBehavior & browserWindow.TreeStyleTabBookmarksService.kGROUP_BOOKMARK_EXPAND_ALL_TREE);\n' +
+ ' if (!TSTTreeStructureApplied)\n' +
+ ' browserWindow.TreeStyleTabService.applyTreeStructureToTabs(tabs, TSTTreeStructure, TSTOpenGroupBookmarkBehavior & browserWindow.TreeStyleTabBookmarksService.kGROUP_BOOKMARK_EXPAND_ALL_TREE);\n' +
+ ' if (!loadInBackground) {\n' +
+ ' browserWindow.setTimeout(function() {\n' +
+ ' browserWindow.gBrowser.treeStyleTab.scrollToTabs(tabs);\n' +
+ ' }, browserWindow.gBrowser.treeStyleTab.collapseDuration); // start scroll after expanding animation is finished\n' +
+ ' }\n' +
' }\n' +
'$1'
));
@@ -384,7 +391,8 @@ var TreeStyleTabBookmarksService = inherit(TreeStyleTabService, {
var result = {
behavior : undefined,
treeStructure : undefined,
- previousTabs : undefined
+ previousTabs : undefined,
+ treeStructureApplied : false
};
if (
aEvent.type != 'drop' &&
@@ -444,14 +452,17 @@ var TreeStyleTabBookmarksService = inherit(TreeStyleTabService, {
}
}
+ result.treeStructure = treeStructure;
+ result.previousTabs = aBrowserWindow.TreeStyleTabService.getTabsInfo(aBrowserWindow.gBrowser);
+
if (TreeStyleTabUtils.getTreePref('compatibility.TMP') &&
'TMP_Places' in aBrowserWindow &&
'openGroup' in aBrowserWindow.TMP_Places) {
- result.treeStructure = treeStructure;
- result.previousTabs = aBrowserWindow.TreeStyleTabService.getTabsInfo(aBrowserWindow.gBrowser);
+ result.treeStructureApplied = false;
}
else {
sv.readyToOpenNewTabGroup(null, treeStructure, result.behavior & sv.kGROUP_BOOKMARK_EXPAND_ALL_TREE);
+ result.treeStructureApplied = true;
}
}
return result;
diff --git a/content/treestyletab/bookmarksOverlayEditable.js b/content/treestyletab/bookmarksOverlayEditable.js
index 9fd1f32..8bf57d7 100644
--- a/content/treestyletab/bookmarksOverlayEditable.js
+++ b/content/treestyletab/bookmarksOverlayEditable.js
@@ -47,26 +47,23 @@ var TreeStyleTabBookmarksServiceEditable = inherit(TreeStyleTabBookmarksService,
// main browser window
if ('StarUI' in window) {
- TreeStyleTabUtils.doPatching(StarUI._doShowEditBookmarkPanel, 'StarUI._doShowEditBookmarkPanel', function(aName, aSource) {
- return eval(aName+' = '+aSource.replace(
- '{',
- '{ TreeStyleTabBookmarksServiceEditable.initEditUI();'
- ));
- }, 'TreeStyleTab');
-
- TreeStyleTabUtils.doPatching(StarUI.quitEditMode, 'StarUI.quitEditMode', function(aName, aSource) {
- return eval(aName+' = '+aSource.replace(
- '{',
- '{ TreeStyleTabBookmarksServiceEditable.saveParentFor(this._itemId);'
- ));
- }, 'TreeStyleTab');
-
- TreeStyleTabUtils.doPatching(StarUI.cancelButtonOnCommand, 'StarUI.cancelButtonOnCommand', function(aName, aSource) {
- return eval(aName+' = '+aSource.replace(
- '{',
- '{ TreeStyleTabBookmarksServiceEditable.canceled = true;'
- ));
- }, 'TreeStyleTab');
+ StarUI.__treestyletab___doShowEditBookmarkPanel = StarUI.__treestyletab___doShowEditBookmarkPanel || StarUI._doShowEditBookmarkPanel;
+ StarUI._doShowEditBookmarkPanel = function(...args) {
+ TreeStyleTabBookmarksServiceEditable.initEditUI();
+ return this.__treestyletab___doShowEditBookmarkPanel.apply(this, args);
+ };
+
+ StarUI.__treestyletab__quitEditMode = StarUI.__treestyletab__quitEditMode || StarUI.quitEditMode;
+ StarUI.quitEditMode = function(...args) {
+ TreeStyleTabBookmarksServiceEditable.saveParentFor(this._itemId);
+ return this.__treestyletab__quitEditMode.apply(this, args);
+ };
+
+ StarUI.__treestyletab__cancelButtonOnCommand = StarUI.__treestyletab__cancelButtonOnCommand || StarUI.cancelButtonOnCommand;
+ StarUI.cancelButtonOnCommand = function(...args) {
+ TreeStyleTabBookmarksServiceEditable.canceled = true;
+ return this.__treestyletab__cancelButtonOnCommand.apply(this, args);
+ };
}
// Bookmarks Property dialog
@@ -121,21 +118,35 @@ var TreeStyleTabBookmarksServiceEditable = inherit(TreeStyleTabBookmarksService,
document.getElementById('treestyletab-parent-label').setAttribute('value', TreeStyleTabUtils.treeBundle.getString('bookmarkProperty.parent.label'));
this.blankItem.setAttribute('label', TreeStyleTabUtils.treeBundle.getString('bookmarkProperty.parent.blank.label'));
+ if (Services.vc.compare(Services.appinfo.platformVersion, '40') >= 0) {
+ // for Firefox 40 and later, after Bug 951651
+ TreeStyleTabUtils.doPatching(gEditItemOverlay.initPanel, 'gEditItemOverlay.initPanel', function(aName, aSource) {
+ return eval(aName+' = '+aSource.replace(
+ /(\}\)?)$/,
+ ' TreeStyleTabBookmarksServiceEditable.parentRow.collapsed = this._element("keywordRow").collapsed && this._element("folderRow").collapsed;\n' +
+ ' if (!TreeStyleTabBookmarksServiceEditable.parentRow.collapsed)\n' +
+ ' TreeStyleTabBookmarksServiceEditable.initParentMenuList();\n' +
+ '$1'
+ ));
+ }, 'TreeStyleTab');
+ }
+ else {
+ // for Firefox 39 and olders
+ TreeStyleTabUtils.doPatching(gEditItemOverlay.initPanel, 'gEditItemOverlay.initPanel', function(aName, aSource) {
+ return eval(aName+' = '+aSource.replace(
+ 'if (this._itemType == Ci.nsINavBookmarksService.TYPE_BOOKMARK) {',
+ '$& TreeStyleTabBookmarksServiceEditable.initParentMenuList();'
+ ));
+ }, 'TreeStyleTab');
- TreeStyleTabUtils.doPatching(gEditItemOverlay._showHideRows, 'gEditItemOverlay._showHideRows', function(aName, aSource) {
- return eval(aName+' = '+aSource.replace(
- /(\}\)?)$/,
- ' TreeStyleTabBookmarksServiceEditable.parentRow.collapsed = this._element("keywordRow").collapsed && this._element("folderRow").collapsed;\n' +
- '$1'
- ));
- }, 'TreeStyleTab');
-
- TreeStyleTabUtils.doPatching(gEditItemOverlay.initPanel, 'gEditItemOverlay.initPanel', function(aName, aSource) {
- return eval(aName+' = '+aSource.replace(
- 'if (this._itemType == Ci.nsINavBookmarksService.TYPE_BOOKMARK) {',
- '$& TreeStyleTabBookmarksServiceEditable.initParentMenuList();'
- ));
- }, 'TreeStyleTab');
+ TreeStyleTabUtils.doPatching(gEditItemOverlay._showHideRows, 'gEditItemOverlay._showHideRows', function(aName, aSource) {
+ return eval(aName+' = '+aSource.replace(
+ /(\}\)?)$/,
+ ' TreeStyleTabBookmarksServiceEditable.parentRow.collapsed = this._element("keywordRow").collapsed && this._element("folderRow").collapsed;\n' +
+ '$1'
+ ));
+ }, 'TreeStyleTab');
+ }
TreeStyleTabUtils.doPatching(gEditItemOverlay.onItemMoved, 'gEditItemOverlay.onItemMoved', function(aName, aSource) {
return eval(aName+' = '+aSource.replace(
diff --git a/content/treestyletab/config.js b/content/treestyletab/config.js
index 3f7c9b6..db33c8f 100644
--- a/content/treestyletab/config.js
+++ b/content/treestyletab/config.js
@@ -110,6 +110,25 @@ function initAppearancePane()
});
}
+function readOverrideSize(aFieldId)
+{
+ var field = document.getElementById(aFieldId);
+ var overrideKey = field.getAttribute('preference');
+ var regularKey = overrideKey.replace(/\.override$/, '');
+ var regularPref = document.getElementById(regularKey);
+ return regularPref.value;
+}
+
+function writeOverrideSize(aFieldId)
+{
+ var field = document.getElementById(aFieldId);
+ var overrideKey = field.getAttribute('preference');
+ var regularKey = overrideKey.replace(/\.override$/, '');
+ var regularPref = document.getElementById(regularKey);
+ regularPref.value = field.value;
+ return field.value;
+}
+
var gDropLinksOnRadioSet,
gGroupBookmarkRadioSet,
@@ -202,22 +221,31 @@ function onChangeTabbarPosition()
else
invertClosebox.setAttribute('collapsed', true);
- var maxTreeLevelH = document.getElementById('maxTreeLevel-horizontal');
- var maxTreeLevelV = document.getElementById('maxTreeLevel-vertical');
- var collapseCheckH = document.getElementById('extensions.treestyletab.allowSubtreeCollapseExpand.horizontal-check');
- var collapseCheckV = document.getElementById('extensions.treestyletab.allowSubtreeCollapseExpand.vertical-check');
-
+ var horizontalElements = [
+ 'maxTreeLevel-horizontal',
+ 'extensions.treestyletab.allowSubtreeCollapseExpand.horizontal-check',
+ 'fixedTabbar-horizontal'
+ ];
+ var verticalElements = [
+ 'maxTreeLevel-vertical',
+ 'extensions.treestyletab.allowSubtreeCollapseExpand.vertical-check',
+ 'fixedTabbar-vertical'
+ ];
if (pos == 'left' || pos == 'right') {
- maxTreeLevelH.setAttribute('collapsed', true);
- maxTreeLevelV.removeAttribute('collapsed');
- collapseCheckH.setAttribute('collapsed', true);
- collapseCheckV.removeAttribute('collapsed');
+ horizontalElements.forEach(function(aId) {
+ document.getElementById(aId).setAttribute('collapsed', true);
+ });
+ verticalElements.forEach(function(aId) {
+ document.getElementById(aId).removeAttribute('collapsed');
+ });
}
else {
- maxTreeLevelH.removeAttribute('collapsed');
- maxTreeLevelV.setAttribute('collapsed', true);
- collapseCheckH.removeAttribute('collapsed');
- collapseCheckV.setAttribute('collapsed', true);
+ horizontalElements.forEach(function(aId) {
+ document.getElementById(aId).removeAttribute('collapsed');
+ });
+ verticalElements.forEach(function(aId) {
+ document.getElementById(aId).setAttribute('collapsed', true);
+ });
}
gTabbarPlacePositionInitialized = true;
diff --git a/content/treestyletab/config.xul b/content/treestyletab/config.xul
index 0854fa8..c790f84 100644
--- a/content/treestyletab/config.xul
+++ b/content/treestyletab/config.xul
@@ -21,6 +21,21 @@
<preference id="extensions.treestyletab.tabbar.fixed.horizontal"
name="extensions.treestyletab.tabbar.fixed.horizontal"
type="bool"/>
+ <preference id="extensions.treestyletab.tabbar.fixed.vertical"
+ name="extensions.treestyletab.tabbar.fixed.vertical"
+ type="bool"/>
+ <preference id="extensions.treestyletab.tabbar.height"
+ name="extensions.treestyletab.tabbar.height"
+ type="int"/>
+ <preference id="extensions.treestyletab.tabbar.height.override"
+ name="extensions.treestyletab.tabbar.height.override"
+ type="int"/>
+ <preference id="extensions.treestyletab.tabbar.width"
+ name="extensions.treestyletab.tabbar.width"
+ type="int"/>
+ <preference id="extensions.treestyletab.tabbar.width.override"
+ name="extensions.treestyletab.tabbar.width.override"
+ type="int"/>
<preference id="extensions.treestyletab.tabbar.syncRelatedPrefsForDynamicPosition"
name="extensions.treestyletab.tabbar.syncRelatedPrefsForDynamicPosition"
type="bool"/>
@@ -99,6 +114,40 @@
</radiogroup>
<spacer flex="1"/>
</hbox>
+ <hbox id="fixedTabbar-horizontal" align="center">
+ <checkbox id="extensions.treestyletab.tabbar.fixed.horizontal-check"
+ preference="extensions.treestyletab.tabbar.fixed.horizontal"
+ label="&context.toggleFixed.label.horizontal;"/>
+ <label id="tabbarSize-before-horizontal"
+ control="tabbarSize-horizontal"
+ value="&config.tabbarSize.before-horizontal;"/>
+ <textbox id="tabbarSize-horizontal"
+ preference="extensions.treestyletab.tabbar.height.override"
+ onsyncfrompreference="return readOverrideSize('tabbarSize-horizontal');"
+ onsynctopreference="return writeOverrideSize('tabbarSize-horizontal');"
+ type="number"
+ min="1" increment="1" style="width:6em;"/>
+ <label id="tabbarSize-after-horizontal"
+ control="tabbarSize-horizontal"
+ value="&config.tabbarSize.after-horizontal;"/>
+ </hbox>
+ <hbox id="fixedTabbar-vertical" align="center">
+ <checkbox id="extensions.treestyletab.tabbar.fixed.vertical-check"
+ preference="extensions.treestyletab.tabbar.fixed.vertical"
+ label="&context.toggleFixed.label.vertical;"/>
+ <label id="tabbarSize-before-vertical"
+ control="tabbarSize-vertical"
+ value="&config.tabbarSize.before-vertical;"/>
+ <textbox id="tabbarSize-vertical"
+ preference="extensions.treestyletab.tabbar.width.override"
+ onsyncfrompreference="return readOverrideSize('tabbarSize-vertical');"
+ onsynctopreference="return writeOverrideSize('tabbarSize-vertical');"
+ type="number"
+ min="1" increment="1" style="width:6em;"/>
+ <label id="tabbarSize-after-vertical"
+ control="tabbarSize-vertical"
+ value="&config.tabbarSize.after-vertical;"/>
+ </hbox>
<hbox align="center">
<checkbox id="extensions.treestyletab.tabbar.invertTabContents-check"
preference="extensions.treestyletab.tabbar.invertTabContents"
diff --git a/content/treestyletab/content-utils-autohide.js b/content/treestyletab/content-utils-autohide.js
index f5e20e2..af4ed48 100644
--- a/content/treestyletab/content-utils-autohide.js
+++ b/content/treestyletab/content-utils-autohide.js
@@ -38,7 +38,7 @@
}
var messageListener = function(aMessage) {
- mydump('CONTENT MESSAGE LISTENED <'+global.content.location+'>');
+ mydump('CONTENT MESSAGE LISTENED <'+(global.content && global.content.location)+'>');
mydump(JSON.stringify(aMessage.json));
switch (aMessage.json.command)
{
diff --git a/content/treestyletab/license.txt b/content/treestyletab/license.txt
index 0a245b0..62dcd4b 100644
--- a/content/treestyletab/license.txt
+++ b/content/treestyletab/license.txt
@@ -19,6 +19,7 @@ the Initial Developer. All Rights Reserved.
Contributor(s): YUKI "Piro" Hiroshi <piro.outsider.reflex at gmail.com>
Alice0775 (fixes some compatibility problems)
+ Xidorn Quan <https://github.com/upsuper> (Firefox 40+ support)
Alternatively, the contents of these files may be used under the terms of
either the GNU General Public License Version 2 or later (the "GPL"), or
diff --git a/content/treestyletab/treestyletab.js b/content/treestyletab/treestyletab.js
index 16c3041..cd47d71 100644
--- a/content/treestyletab/treestyletab.js
+++ b/content/treestyletab/treestyletab.js
@@ -1,7 +1,7 @@
(function() {
/**
* On secondary (and later) window, SSWindowStateBusy event can be fired
- * before DOMContentLoad, on "domwindowopened".
+ * before DOMContentLoaded, on "domwindowopened".
*/
var SSWindowStateBusyListener = function TSTSSWindowStateBusyListener(aEvent) {
window.removeEventListener(aEvent.type, TSTSSWindowStateBusyListener, false);
@@ -9,10 +9,10 @@
SSWindowStateBusyListener = undefined;
};
window.addEventListener('SSWindowStateBusy', SSWindowStateBusyListener, false);
- window.addEventListener('DOMContentLoad', function onDOMContentLoad(aEvent) {
- window.removeEventListener(aEvent.type, onDOMContentLoad, false);
+ window.addEventListener('DOMContentLoaded', function onDOMContentLoaded(aEvent) {
+ window.removeEventListener(aEvent.type, onDOMContentLoaded, false);
if (SSWindowStateBusyListener) {
- window.removeEventListener('SSWindowStateBusy', TSTSSWindowStateBusyListener, false);
+ window.removeEventListener('SSWindowStateBusy', SSWindowStateBusyListener, false);
SSWindowStateBusyListener = undefined;
}
}, false);
diff --git a/content/treestyletab/windowHelper.js b/content/treestyletab/windowHelper.js
index 7095eb9..9ece3be 100644
--- a/content/treestyletab/windowHelper.js
+++ b/content/treestyletab/windowHelper.js
@@ -171,8 +171,8 @@ var TreeStyleTabWindowHelper = {
var viewImageMethod = ('viewImage' in nsContextMenu.prototype) ? 'viewImage' : 'viewMedia' ;
TreeStyleTabUtils.doPatching(nsContextMenu.prototype[viewImageMethod], 'nsContextMenu.prototype.'+viewImageMethod, function(aName, aSource) {
return eval(aName+' = '+aSource.replace(
- 'openUILink(',
- 'TreeStyleTabService.onBeforeViewMedia(e, this.target.ownerDocument.defaultView); $&'
+ /(openUILink\()/g,
+ 'TreeStyleTabService.onBeforeViewMedia(e, this.target.ownerDocument.defaultView); $1'
));
}, 'TreeStyleTab');
@@ -259,17 +259,33 @@ var TreeStyleTabWindowHelper = {
));
}, 'TreeStyleTab');
- TreeStyleTabUtils.doPatching(FullScreen.mouseoverToggle, 'FullScreen.mouseoverToggle', function(aName, aSource) {
- return eval(aName+' = '+aSource.replace(
- 'this._isChromeCollapsed = !aShow;',
- 'gBrowser.treeStyleTab.updateFloatingTabbar(gBrowser.treeStyleTab.kTABBAR_UPDATE_BY_FULLSCREEN); $&'
- ));
- }, 'treeStyleTab');
+ if ('showNavToolbox' in FullScreen) { // for Firefox 40 or later
+ TreeStyleTabUtils.doPatching(FullScreen.showNavToolbox, 'FullScreen.showNavToolbox', function(aName, aSource) {
+ return eval(aName+' = '+aSource.replace(
+ 'this._isChromeCollapsed = false;',
+ 'gBrowser.treeStyleTab.updateFloatingTabbar(gBrowser.treeStyleTab.kTABBAR_UPDATE_BY_FULLSCREEN); $&'
+ ));
+ }, 'treeStyleTab');
+ TreeStyleTabUtils.doPatching(FullScreen.hideNavToolbox, 'FullScreen.hideNavToolbox', function(aName, aSource) {
+ return eval(aName+' = '+aSource.replace(
+ 'this._isChromeCollapsed = true;',
+ 'gBrowser.treeStyleTab.updateFloatingTabbar(gBrowser.treeStyleTab.kTABBAR_UPDATE_BY_FULLSCREEN); $&'
+ ));
+ }, 'treeStyleTab');
+ }
+ else if ('mouseoverToggle' in FullScreen) { // for Firefox 39 or older
+ TreeStyleTabUtils.doPatching(FullScreen.mouseoverToggle, 'FullScreen.mouseoverToggle', function(aName, aSource) {
+ return eval(aName+' = '+aSource.replace(
+ 'this._isChromeCollapsed = !aShow;',
+ 'gBrowser.treeStyleTab.updateFloatingTabbar(gBrowser.treeStyleTab.kTABBAR_UPDATE_BY_FULLSCREEN); $&'
+ ));
+ }, 'treeStyleTab');
+ }
TreeStyleTabUtils.doPatching(FullScreen.toggle, 'FullScreen.toggle', function(aName, aSource) {
return eval(aName+' = '+aSource.replace(
- '{',
- '{ gBrowser.treeStyleTab.onBeforeFullScreenToggle(); '
+ 'if (enterFS) {',
+ 'gBrowser.treeStyleTab.onBeforeFullScreenToggle(enterFS); $&'
));
}, 'treeStyleTab');
@@ -550,24 +566,24 @@ var TreeStyleTabWindowHelper = {
/**
* The default implementation fails to scroll to tab if it is expanding.
- * So we have to inject codes to override its effect.
+ * So we have to override its effect.
*/
{
let scrollbox = aTabBrowser.treeStyleTab.scrollBox;
- TreeStyleTabUtils.doPatching(scrollbox.ensureElementIsVisible, 'scrollbox.ensureElementIsVisible', function(aName, aSource) {
- return eval(aName+' = '+aSource.replace(
- '{',
- '{\n' +
- ' var treeStyleTab = TreeStyleTabService.getTabBrowserFromChild(this).treeStyleTab;\n' +
- ' if (treeStyleTab && treeStyleTab.shouldCancelEnsureElementIsVisible())\n' +
- ' return;\n' +
- ' if (\n' +
- ' treeStyleTab &&\n' +
- ' (arguments.length == 1 || arguments[1])\n' +
- ' )\n' +
- ' return treeStyleTab.scrollToTab(arguments[0]);'
- ));
- }, /treeStyleTab|ensureTabIsVisible/); // if there is a string "ensureTabIsVisible", it is replaced by Tab Mix Plus!
+ if (!scrollbox.__treestyletab__ensureElementIsVisible) {
+ scrollbox.__treestyletab__ensureElementIsVisible = scrollbox.ensureElementIsVisible;
+ scrollbox.ensureElementIsVisible = function(...aArgs) {
+ var treeStyleTab = TreeStyleTabService.getTabBrowserFromChild(this).treeStyleTab;
+ if (treeStyleTab) {
+ if (treeStyleTab.shouldCancelEnsureElementIsVisible())
+ return;
+ let shouldScrollNow = aArgs[1] === false;
+ if (treeStyleTab.animationEnabled && !shouldScrollNow)
+ return treeStyleTab.scrollToTab(aArgs[0]);
+ }
+ this.__treestyletab__ensureElementIsVisible.apply(this, aArgs);
+ };
+ }
}
{
diff --git a/content/treestyletab/windowHelperHacks.js b/content/treestyletab/windowHelperHacks.js
index 167de96..fd28c5d 100644
--- a/content/treestyletab/windowHelperHacks.js
+++ b/content/treestyletab/windowHelperHacks.js
@@ -246,10 +246,10 @@ TreeStyleTabWindowHelper.overrideExtensionsPreInit = function TSTWH_overrideExte
globDndtb.setTheStuff &&
TreeStyleTabUtils.getTreePref('compatibility.DragNDropToolbars')) {
let reinitTabbar = function() {
- gBrowser.treeStyleTab.syncDestroyTabbar();
- window.setTimeout(function() {
- gBrowser.treeStyleTab.syncReinitTabbar();
- }, 100);
+ gBrowser.treeStyleTab.destroyTabbar()
+ .then(function() {
+ gBrowser.treeStyleTab.reinitTabbar();
+ });
};
globDndtb.__treestyletab__setOrder = globDndtb.setOrder;
globDndtb.setOrder = function() {
@@ -1323,10 +1323,10 @@ TreeStyleTabWindowHelper.overrideExtensionsDelayed = function TSTWH_overrideExte
aEvent.attrName == 'hidden' &&
gBrowser.tabContainer.parentNode.id == (aEvent.newValue == 'true' ? 'toolbar-menubar' : 'personal-titlebar' )
) {
- gBrowser.treeStyleTab.syncDestroyTabbar();
- window.setTimeout(function() {
- gBrowser.treeStyleTab.syncReinitTabbar();
- }, 0);
+ gBrowser.treeStyleTab.destroyTabbar()
+ .then(function() {
+ gBrowser.treeStyleTab.reinitTabbar();
+ });
}
break;
@@ -1461,23 +1461,22 @@ TreeStyleTabWindowHelper.overrideExtensionsDelayed = function TSTWH_overrideExte
let manager = service.engineManager || service.Engines /* old name */;
let engine = manager.get('tabs');
- let uri = tab.getAttribute('label');
- if (engine.locallyOpenTabMatchesURL(uri))
- return;
-
- for (let [guid, client] in Iterator(engine.getAllClients()))
- {
- if (client.tabs.some(function({ urlHistory }) {
- return urlHistory[0] == uri;
- })) {
- let parent = b.selectedTab;
- window.setTimeout(function() {
- if (tab.parentNode && !b.treeStyleTab.getParentTab(tab))
+ let parent = b.selectedTab;
+ window.setTimeout(function() {
+ let uri = tab.linkedBrowser.userTypedValue || tab.linkedBrowser.currentURI.spec;
+ for (let [guid, client] in Iterator(engine.getAllClients()))
+ {
+ if (client.tabs.some(function({ urlHistory }) {
+ return urlHistory[0] == uri;
+ })) {
+ if (parent.parentNode &&
+ tab.parentNode &&
+ !b.treeStyleTab.getParentTab(tab))
b.treeStyleTab.attachTabTo(tab, parent);
- }, 0);
- return;
+ return;
+ }
}
- }
+ }, 0);
return;
case 'unload':
diff --git a/defaults/preferences/treestyletab.js b/defaults/preferences/treestyletab.js
index a4b81f9..168311f 100644
--- a/defaults/preferences/treestyletab.js
+++ b/defaults/preferences/treestyletab.js
@@ -18,6 +18,8 @@ pref("extensions.treestyletab.tabbar.height", 32);
pref("extensions.treestyletab.tabbar.height.default", 32);
pref("extensions.treestyletab.tabbar.shrunkenWidth", 80);
pref("extensions.treestyletab.tabbar.shrunkenWidth.default", 80);
+pref("extensions.treestyletab.tabbar.width.override", 200);
+pref("extensions.treestyletab.tabbar.height.override", 200);
/**
* Position of the tab bar, possible values are:
diff --git a/install.rdf b/install.rdf
index d3de2ab..d293fcd 100644
--- a/install.rdf
+++ b/install.rdf
@@ -5,7 +5,7 @@
<RDF:Description RDF:about="urn:mozilla:install-manifest"
em:id="treestyletab at piro.sakura.ne.jp"
em:name="Tree Style Tab"
- em:version="0.15.2015030601"
+ em:version="0.15.20150902901"
em:creator="YUKI "Piro" Hiroshi"
em:description="Show tabs like a tree."
em:homepageURL="http://piro.sakura.ne.jp/xul/_treestyletab.html.en"
@@ -31,6 +31,7 @@
<em:contributor>wanabe (some bug fixes)</em:contributor>
<em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
<em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+ <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
</RDF:Description>
</em:localized>
<em:localized>
@@ -45,6 +46,7 @@
<em:contributor>wanabe (some bug fixes)</em:contributor>
<em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
<em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+ <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
</RDF:Description>
</em:localized>
<em:localized>
@@ -59,6 +61,7 @@
<em:contributor>wanabe (some bug fixes)</em:contributor>
<em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
<em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+ <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
<em:translator>Godai71.Extenzilla (it-IT locale)</em:translator>
</RDF:Description>
</em:localized>
@@ -74,6 +77,7 @@
<em:contributor>wanabe (some bug fixes)</em:contributor>
<em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
<em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+ <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
<em:translator>Fatiaomao (zh-CN locale)</em:translator>
<em:translator>hzhbest (zh-CN locale)</em:translator>
</RDF:Description>
@@ -90,6 +94,7 @@
<em:contributor>wanabe (some bug fixes)</em:contributor>
<em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
<em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+ <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
<em:translator>tito (es-ES locale)</em:translator>
</RDF:Description>
</em:localized>
@@ -105,6 +110,7 @@
<em:contributor>wanabe (some bug fixes)</em:contributor>
<em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
<em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+ <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
<em:translator>Andy Pillip (de-DE locale)</em:translator>
</RDF:Description>
</em:localized>
@@ -120,6 +126,7 @@
<em:contributor>wanabe (some bug fixes)</em:contributor>
<em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
<em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+ <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
<em:translator>HkYtrewq (zh-TW locale)</em:translator>
<em:translator>Tsprajna (zh-TW locale)</em:translator>
<em:translator>bootleq (zh-TW locale)</em:translator>
@@ -137,6 +144,7 @@
<em:contributor>wanabe (some bug fixes)</em:contributor>
<em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
<em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+ <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
<em:translator>L'Autour (ru locale)</em:translator>
<em:translator>Infocatcher (ru locale)</em:translator>
</RDF:Description>
@@ -153,6 +161,7 @@
<em:contributor>wanabe (some bug fixes)</em:contributor>
<em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
<em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+ <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
<em:translator>Leszek(teo)Życzkowski (pl locale)</em:translator>
</RDF:Description>
</em:localized>
@@ -168,6 +177,7 @@
<em:contributor>wanabe (some bug fixes)</em:contributor>
<em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
<em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+ <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
<em:translator>Laurent Haas (fr-FR locale)</em:translator>
<em:translator>AxlMun (fr-FR locale)</em:translator>
</RDF:Description>
@@ -184,6 +194,7 @@
<em:contributor>wanabe (some bug fixes)</em:contributor>
<em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
<em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+ <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
<em:translator>Mikael Hiort af Ornäs (sv-SE)</em:translator>
</RDF:Description>
</em:localized>
@@ -199,6 +210,7 @@
<em:contributor>wanabe (some bug fixes)</em:contributor>
<em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
<em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+ <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
<em:translator>Regmos (da-DK)</em:translator>
</RDF:Description>
</em:localized>
@@ -214,6 +226,7 @@
<em:contributor>wanabe (some bug fixes)</em:contributor>
<em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
<em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+ <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
<em:translator>Vlastimil Ovčáčík (cs)</em:translator>
</RDF:Description>
</em:localized>
@@ -221,8 +234,8 @@
<em:targetApplication>
<RDF:Description em:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
- em:minVersion="31.0"
- em:maxVersion="39.0a1" />
+ em:minVersion="38.0"
+ em:maxVersion="44.0a1" />
</em:targetApplication>
</RDF:Description>
</RDF:RDF>
diff --git a/locale/cs/treestyletab/treestyletab.dtd b/locale/cs/treestyletab/treestyletab.dtd
index d232c52..63ab372 100644
--- a/locale/cs/treestyletab/treestyletab.dtd
+++ b/locale/cs/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
<!ENTITY config.maxTreeLevel.before "až do">
<!ENTITY config.maxTreeLevel.after "úrovní">
<!ENTITY config.allowSubtreeCollapseExpand "Umožnit sbalení/rozbalení stromu panelů">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal "px height">
+<!ENTITY config.tabbarSize.before-vertical ":">
+<!ENTITY config.tabbarSize.after-vertical "px width">
<!ENTITY config.tabs.style "Styl">
diff --git a/locale/da-DK/treestyletab/treestyletab.dtd b/locale/da-DK/treestyletab/treestyletab.dtd
index 19d8412..1b9834b 100644
--- a/locale/da-DK/treestyletab/treestyletab.dtd
+++ b/locale/da-DK/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
<!ENTITY config.maxTreeLevel.before "op til">
<!ENTITY config.maxTreeLevel.after "niveauer">
<!ENTITY config.allowSubtreeCollapseExpand "Tillad sammenfold/udvid fanetræ">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal "px height">
+<!ENTITY config.tabbarSize.before-vertical ":">
+<!ENTITY config.tabbarSize.after-vertical "px width">
<!ENTITY config.tabs.style "Udseende">
diff --git a/locale/de-DE/treestyletab/treestyletab.dtd b/locale/de-DE/treestyletab/treestyletab.dtd
index 631852c..e93436f 100644
--- a/locale/de-DE/treestyletab/treestyletab.dtd
+++ b/locale/de-DE/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
<!ENTITY config.maxTreeLevel.before "bis">
<!ENTITY config.maxTreeLevel.after "Level">
<!ENTITY config.allowSubtreeCollapseExpand "Auf- und Einklappen von Zweigen erlauben">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal "px height">
+<!ENTITY config.tabbarSize.before-vertical ":">
+<!ENTITY config.tabbarSize.after-vertical "px width">
<!ENTITY config.tabs.style "Style">
diff --git a/locale/en-US/treestyletab/treestyletab.dtd b/locale/en-US/treestyletab/treestyletab.dtd
index e3bd0ab..09f93f9 100644
--- a/locale/en-US/treestyletab/treestyletab.dtd
+++ b/locale/en-US/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
<!ENTITY config.maxTreeLevel.before "until">
<!ENTITY config.maxTreeLevel.after "level(s)">
<!ENTITY config.allowSubtreeCollapseExpand "Allow to collapse/expand tree of tabs">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal "px height">
+<!ENTITY config.tabbarSize.before-vertical ":">
+<!ENTITY config.tabbarSize.after-vertical "px width">
<!ENTITY config.tabs.style "Style">
diff --git a/locale/es-ES/treestyletab/treestyletab.dtd b/locale/es-ES/treestyletab/treestyletab.dtd
index 2cfee79..8519d53 100644
--- a/locale/es-ES/treestyletab/treestyletab.dtd
+++ b/locale/es-ES/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
<!ENTITY config.maxTreeLevel.before "hasta">
<!ENTITY config.maxTreeLevel.after "nivel(es)">
<!ENTITY config.allowSubtreeCollapseExpand "Permitir colapsar/expandir los sub-árboles de las pestañas">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal "px height">
+<!ENTITY config.tabbarSize.before-vertical ":">
+<!ENTITY config.tabbarSize.after-vertical "px width">
<!ENTITY config.tabs.style "Estilo">
diff --git a/locale/fr-FR/treestyletab/treestyletab.dtd b/locale/fr-FR/treestyletab/treestyletab.dtd
index 12917f1..5d80487 100644
--- a/locale/fr-FR/treestyletab/treestyletab.dtd
+++ b/locale/fr-FR/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
<!ENTITY config.maxTreeLevel.before "jusqu'à">
<!ENTITY config.maxTreeLevel.after "niveau(x)">
<!ENTITY config.allowSubtreeCollapseExpand "Autoriser le repliage/dépliage des arborescences d'onglets">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal "px height">
+<!ENTITY config.tabbarSize.before-vertical ":">
+<!ENTITY config.tabbarSize.after-vertical "px width">
<!ENTITY config.tabs.style "Style">
diff --git a/locale/it-IT/treestyletab/treestyletab.dtd b/locale/it-IT/treestyletab/treestyletab.dtd
index 78cf62b..eb4e656 100644
--- a/locale/it-IT/treestyletab/treestyletab.dtd
+++ b/locale/it-IT/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
<!ENTITY config.maxTreeLevel.before "until">
<!ENTITY config.maxTreeLevel.after "level(s)">
<!ENTITY config.allowSubtreeCollapseExpand "Permetti di contrarre/espandere sottoalberi delle schede">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal "px height">
+<!ENTITY config.tabbarSize.before-vertical ":">
+<!ENTITY config.tabbarSize.after-vertical "px width">
<!ENTITY config.tabs.style "Style">
diff --git a/locale/ja/treestyletab/treestyletab.dtd b/locale/ja/treestyletab/treestyletab.dtd
index 3a21030..be13147 100644
--- a/locale/ja/treestyletab/treestyletab.dtd
+++ b/locale/ja/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
<!ENTITY config.maxTreeLevel.before "(">
<!ENTITY config.maxTreeLevel.after "階層まで)">
<!ENTITY config.allowSubtreeCollapseExpand "ツリーを折りたためるようにする">
+<!ENTITY config.tabbarSize.before-horizontal "高さ:">
+<!ENTITY config.tabbarSize.after-horizontal "ピクセル">
+<!ENTITY config.tabbarSize.before-vertical "幅:">
+<!ENTITY config.tabbarSize.after-vertical "ピクセル">
<!ENTITY config.tabs.style "スタイル">
diff --git a/locale/pl/treestyletab/treestyletab.dtd b/locale/pl/treestyletab/treestyletab.dtd
index 5bf988d..6bece92 100644
--- a/locale/pl/treestyletab/treestyletab.dtd
+++ b/locale/pl/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
<!ENTITY config.maxTreeLevel.before "until">
<!ENTITY config.maxTreeLevel.after "level(s)">
<!ENTITY config.allowSubtreeCollapseExpand "Zezwalaj na zwijanie/rozwijanie drzewa kart">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal "px height">
+<!ENTITY config.tabbarSize.before-vertical ":">
+<!ENTITY config.tabbarSize.after-vertical "px width">
<!ENTITY config.tabs.style "Style">
diff --git a/locale/ru/treestyletab/treestyletab.dtd b/locale/ru/treestyletab/treestyletab.dtd
index e786b2a..67895fc 100755
--- a/locale/ru/treestyletab/treestyletab.dtd
+++ b/locale/ru/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
<!ENTITY config.maxTreeLevel.before "пока уровней меньше">
<!ENTITY config.maxTreeLevel.after "">
<!ENTITY config.allowSubtreeCollapseExpand "Разрешить сворачивать/разворачивать поддеревья вкладок">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal "px height">
+<!ENTITY config.tabbarSize.before-vertical ":">
+<!ENTITY config.tabbarSize.after-vertical "px width">
<!ENTITY config.tabs.style "Стиль">
diff --git a/locale/sv-SE/treestyletab/treestyletab.dtd b/locale/sv-SE/treestyletab/treestyletab.dtd
index af8f972..bc7ccd7 100644
--- a/locale/sv-SE/treestyletab/treestyletab.dtd
+++ b/locale/sv-SE/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
<!ENTITY config.maxTreeLevel.before "t.o.m. den">
<!ENTITY config.maxTreeLevel.after "nivån">
<!ENTITY config.allowSubtreeCollapseExpand "Tillåt att flikträd kan minimeras/expanderas">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal "px height">
+<!ENTITY config.tabbarSize.before-vertical ":">
+<!ENTITY config.tabbarSize.after-vertical "px width">
<!ENTITY config.tabs.style "Format">
diff --git a/locale/zh-CN/treestyletab/treestyletab.dtd b/locale/zh-CN/treestyletab/treestyletab.dtd
index a5d581f..1b3dd50 100644
--- a/locale/zh-CN/treestyletab/treestyletab.dtd
+++ b/locale/zh-CN/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
<!ENTITY config.maxTreeLevel.before "最多">
<!ENTITY config.maxTreeLevel.after "层">
<!ENTITY config.allowSubtreeCollapseExpand "允许折叠/展开标签子树">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal "px height">
+<!ENTITY config.tabbarSize.before-vertical ":">
+<!ENTITY config.tabbarSize.after-vertical "px width">
<!ENTITY config.tabs.style "样式">
diff --git a/locale/zh-TW/treestyletab/treestyletab.dtd b/locale/zh-TW/treestyletab/treestyletab.dtd
index ac63530..247ed9f 100644
--- a/locale/zh-TW/treestyletab/treestyletab.dtd
+++ b/locale/zh-TW/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
<!ENTITY config.maxTreeLevel.before "(最多">
<!ENTITY config.maxTreeLevel.after "層)">
<!ENTITY config.allowSubtreeCollapseExpand "允許摺疊 / 展開樹狀子目錄">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal "px height">
+<!ENTITY config.tabbarSize.before-vertical ":">
+<!ENTITY config.tabbarSize.after-vertical "px width">
<!ENTITY config.tabs.style "樣式">
diff --git a/modules/autoHide.js b/modules/autoHide.js
index 694c728..6665e8a 100644
--- a/modules/autoHide.js
+++ b/modules/autoHide.js
@@ -297,9 +297,7 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
aValue = newWidth.expanded;
}
this.treeStyleTab.setWindowValue(this.kTABBAR_EXPANDED_WIDTH, aValue);
- this.treeStyleTab.setPrefForActiveWindow(function() {
- utils.setTreePref('tabbar.width', aValue);
- });
+ utils.setTreePref('tabbar.width', aValue);
return aValue;
},
get shrunkenWidth()
@@ -320,9 +318,7 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
aValue = newWidth.shrunken;
}
this.treeStyleTab.setWindowValue(this.kTABBAR_SHRUNKEN_WIDTH, aValue);
- this.treeStyleTab.setPrefForActiveWindow(function() {
- utils.setTreePref('tabbar.shrunkenWidth', aValue);
- });
+ utils.setTreePref('tabbar.shrunkenWidth', aValue);
return aValue;
},
@@ -470,6 +466,7 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
this.treeStyleTab.tabStripPlaceHolder.addEventListener('mousemove', this, true);
this.treeStyleTab.tabStrip.addEventListener('mousemove', this, true);
this.toggler.addEventListener('mousemove', this, true);
+ this.window.addEventListener('TabRemotenessChange', this, false);
this.mouseMoveListening = true;
@@ -485,6 +482,7 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
this.treeStyleTab.tabStripPlaceHolder.removeEventListener('mousemove', this, true);
this.treeStyleTab.tabStrip.removeEventListener('mousemove', this, true);
this.toggler.removeEventListener('mousemove', this, true);
+ this.window.removeEventListener('TabRemotenessChange', this, false);
this.mouseMoveListening = false;
@@ -842,19 +840,13 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
}
if (DEBUG) {
- let humanReadableReason =
- (aReason & this.kSHOWN_BY_SHORTCUT ? 'shortcut ' : '' ) +
- (aReason & this.kSHOWN_BY_MOUSEMOVE ? 'mousemove ' : '' ) +
- (aReason & this.kSHOWN_BY_FEEDBACK ? 'feedback ' : '' ) +
- (aReason & this.kSHOWHIDE_BY_START ? 'start ' : '' ) +
- (aReason & this.kSHOWHIDE_BY_END ? 'end ' : '' ) +
- (aReason & this.kSHOWHIDE_BY_POSITION_CHANGE ? 'positionchange ' : '' ) +
- (aReason & this.kSHOWHIDE_BY_RESIZE ? 'resize ' : '' ) +
- (aReason & this.kHIDDEN_BY_CLICK ? 'click ' : '' );
+ let givenReason = this._getHumanReadableReason(aReason);
+ let unifiedReason = this._getHumanReadableReason(this.showHideReason);
if (this.expanded)
- dump('autoHide: show by ' + humanReadableReason + '\n');
+ dump('autoHide: show by ' + aReason + '(' + givenReason + ' / ' + unifiedReason + ')\n');
else
- dump('autoHide: hide by ' + humanReadableReason + '\n');
+ dump('autoHide: hide by ' + aReason + '(' + givenReason + ' / ' + unifiedReason + ')\n');
+ dump((new Error()).stack.replace(/^/gm, ' ').replace(/\s+$/, '') + '\n');
}
this.fireStateChangingEvent();
@@ -869,6 +861,19 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
aSelf.showHideContentsAreaScreen();
}, 0, this);
},
+ _getHumanReadableReason: function AHB_getHumanReadableReason(aReason)
+ {
+ let humanReadableReason =
+ (aReason & this.kSHOWN_BY_SHORTCUT ? 'shortcut ' : '' ) +
+ (aReason & this.kSHOWN_BY_MOUSEMOVE ? 'mousemove ' : '' ) +
+ (aReason & this.kSHOWN_BY_FEEDBACK ? 'feedback ' : '' ) +
+ (aReason & this.kSHOWHIDE_BY_START ? 'start ' : '' ) +
+ (aReason & this.kSHOWHIDE_BY_END ? 'end ' : '' ) +
+ (aReason & this.kSHOWHIDE_BY_POSITION_CHANGE ? 'positionchange ' : '' ) +
+ (aReason & this.kSHOWHIDE_BY_RESIZE ? 'resize ' : '' ) +
+ (aReason & this.kHIDDEN_BY_CLICK ? 'click ' : '' );
+ return humanReadableReason.replace(/\s+$/, '');
+ },
showHideContentsAreaScreen : function AHB_showHideContentsAreaScreen()
{
if (
@@ -927,7 +932,7 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
this.showHideReason |= aReason;
}
if (!this.expanded)
- this.showHideInternal();
+ this.showHideInternal(aReason);
},
hide : function AHB_hide(aReason) /* PUBLIC API */
@@ -947,7 +952,7 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
return;
}
if (this.expanded)
- this.showHideInternal();
+ this.showHideInternal(aReason);
},
onShowing : function AHB_onShowing()
@@ -1083,14 +1088,14 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
switch (aPrefName)
{
case 'extensions.treestyletab.tabbar.autoHide.mode':
- if (!this.window.TreeStyleTabService.shouldApplyNewPref)
+ if (!this.window.TreeStyleTabService.shouldApplyNewPref('tabbar.autoHide.mode'))
return;
this.browser.setAttribute(this.kMODE+'-normal', value);
this.updateMode(value);
return;
case 'extensions.treestyletab.tabbar.autoHide.mode.fullscreen':
- if (!this.window.TreeStyleTabService.shouldApplyNewPref)
+ if (!this.window.TreeStyleTabService.shouldApplyNewPref('tabbar.autoHide.mode.fullscreen'))
return;
this.browser.setAttribute(this.kMODE+'-fullscreen', value);
this.updateMode(value);
@@ -1156,6 +1161,9 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
case 'mousemove':
return this.handleMouseMove(aEvent);
+ case 'TabRemotenessChange':
+ return this.notifyStatusToAllTabs(aEvent.target);
+
case 'TabOpen':
case 'TabClose':
return this.showForFeedback();
@@ -1484,11 +1492,9 @@ AutoHideWindow.prototype = inherit(AutoHideBase.prototype, {
utils.getTreePref(toggleKey) :
AutoHideBrowser.prototype.kMODE_DISABLED ;
- this.treeStyleTab.setPrefForActiveWindow(function() {
- utils.setTreePref(key, mode);
- b.setAttribute(AutoHideBrowser.prototype.kMODE+'-'+(w.fullScreen ? 'fullscreen' : 'normal' ), mode);
- b.treeStyleTab.autoHide.updateMode(mode);
- });
+ utils.setTreePref(key, mode);
+ b.setAttribute(AutoHideBrowser.prototype.kMODE+'-'+(w.fullScreen ? 'fullscreen' : 'normal' ), mode);
+ b.treeStyleTab.autoHide.updateMode(mode);
},
initMode : function AHW_initMode()
diff --git a/modules/base.js b/modules/base.js
index 9bbaab1..3b0e385 100644
--- a/modules/base.js
+++ b/modules/base.js
@@ -496,72 +496,6 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
/* utilities */
- doAndWaitDOMEvent : function TSTBase_doAndWaitDOMEvent(...aArgs)
- {
- var type, target, delay, task;
- for (let i = 0, maxi = aArgs.length; i < maxi; i++)
- {
- let arg = aArgs[i];
- switch(typeof arg)
- {
- case 'string':
- type = arg;
- continue;
-
- case 'number':
- delay = arg;
- continue;
-
- case 'function':
- task = arg;
- continue;
-
- default:
- target = arg;
- continue;
- }
- }
-
- if (!target || !type) {
- if (task)
- task();
- return;
- }
-
- var done = false;
- var listener = function(aEvent) {
- setTimeout(function() {
- done = true;
- }, delay || 0);
- target.removeEventListener(type, listener, false);
- };
-
- if (task)
- setTimeout((function() {
- try {
- task();
- }
- catch(e) {
- dump(e+'\n');
- target.removeEventListener(type, listener, false);
- done = true;
- this.defaultErrorHandler(e);
- }
- }).bind(this), 0);
-
- target.addEventListener(type, listener, false);
-
- var thread = Components
- .classes['@mozilla.org/thread-manager;1']
- .getService()
- .mainThread;
- while (!done)
- {
- //dump('WAIT '+type+' '+Date.now()+'\n');
- thread.processNextEvent(true);
- }
- },
-
findOffsetParent : function TSTBase_findOffsetParent(aNode)
{
var parent = aNode.parentNode;
@@ -1014,8 +948,13 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
setTabStripAttribute : function TSTBase_setTabStripAttribute(aAttr, aValue)
{
var strip = this.tabStrip;
- if (!strip)
+ if (!strip) {
+ if (DEBUG) {
+ dump('FAILED TO SET TABSTRIP ATTRIBUTE ' + aAttr + '=' + aValue + '\n');
+ dump((new Error()).stack + '\n');
+ }
return;
+ }
var isFeatureAttribute = aAttr.indexOf('treestyletab-') == 0;
if (aValue) {
if (this._tabStripPlaceHolder)
@@ -1120,7 +1059,8 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
for (let i = 0, maxi = tabs.length; i < maxi; i++)
{
let tab = tabs[i];
- if (tab.linkedBrowser.contentWindow == top)
+ let isInProcessTab = tab.linkedBrowser.getAttribute('remote') != 'true';
+ if (isInProcessTab && tab.linkedBrowser.contentWindow == top)
return tab;
}
return null;
@@ -2598,24 +2538,13 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
return size;
},
- get shouldApplyNewPref()
+ shouldApplyNewPref : function TSTBase_shouldApplyNewPref(aKey)
{
return (
- !this.applyOnlyForActiveWindow ||
- this.window == this.topBrowserWindow
- ) &&
- !this.inWindowDestoructionProcess;
- },
-
- applyOnlyForActiveWindow : false,
- setPrefForActiveWindow : function TSTBase_setPrefForActiveWindow(aTask) {
- TreeStyleTabBase.applyOnlyForActiveWindow = true;
- try {
- aTask.call(this);
- }
- finally {
- TreeStyleTabBase.applyOnlyForActiveWindow = false;
- }
+ !utils.isTreePrefChanging(aKey) &&
+ this.window == this.topBrowserWindow &&
+ !this.inWindowDestoructionProcess
+ );
}
});
diff --git a/modules/browser.js b/modules/browser.js
index 8029094..be34f07 100644
--- a/modules/browser.js
+++ b/modules/browser.js
@@ -20,6 +20,7 @@
* Contributor(s): YUKI "Piro" Hiroshi <piro.outsider.reflex at gmail.com>
* wanabe <https://github.com/wanabe>
* Tetsuharu OHZEKI <https://github.com/saneyuki>
+ * Xidorn Quan <https://github.com/upsuper> (Firefox 40+ support)
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -56,6 +57,7 @@ XPCOMUtils.defineLazyModuleGetter(this, 'TabpanelDNDObserver', 'resource://trees
XPCOMUtils.defineLazyModuleGetter(this, 'AutoHideBrowser', 'resource://treestyletab-modules/autoHide.js');
XPCOMUtils.defineLazyModuleGetter(this, 'ContentBridge', 'resource://treestyletab-modules/contentBridge.js');
XPCOMUtils.defineLazyModuleGetter(this, 'BrowserUIShowHideObserver', 'resource://treestyletab-modules/browserUIShowHideObserver.js');
+XPCOMUtils.defineLazyModuleGetter(this, 'visuallyselectedTabs', 'resource://treestyletab-modules/lib/visuallyselectedTabs.jsm');
XPCOMUtils.defineLazyGetter(this, 'window', function() {
Cu.import('resource://treestyletab-modules/lib/namespace.jsm');
@@ -213,9 +215,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
set tabbarWidth(aValue)
{
this.setWindowValue(this.kTABBAR_WIDTH, aValue);
- this.setPrefForActiveWindow(function() {
- utils.setTreePref('tabbar.width', aValue);
- });
+ utils.setTreePref('tabbar.width', aValue);
return aValue;
},
*/
@@ -230,9 +230,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
set tabbarHeight(aValue)
{
this.setWindowValue(this.kTABBAR_HEIGHT, aValue);
- this.setPrefForActiveWindow(function() {
- utils.setTreePref('tabbar.height', aValue);
- });
+ utils.setTreePref('tabbar.height', aValue);
return aValue;
},
@@ -358,7 +356,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
this.window.UndoTabService.doOperation(
function() {
self._changeTabbarPosition(position);
- delete self._temporaryPosition;
},
{
label : utils.treeBundle.getString('undo_changeTabbarPosition_label'),
@@ -373,7 +370,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
}
else {
this._changeTabbarPosition(position);
- delete this._temporaryPosition;
}
return position;
},
@@ -475,6 +471,11 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
return label;
},
+ getTabSoundButton : function TSTBrowser_getTabSoundButton(aTab)
+ {
+ return this.document.getAnonymousElementByAttribute(aTab, 'anonid', 'soundplaying-icon');
+ },
+
getTabClosebox : function TSTBrowser_getTabClosebox(aTab)
{
var d = this.document;
@@ -752,20 +753,16 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
let width = this.tabbarWidth;
let minWidth = Math.max(this.MIN_TABBAR_WIDTH, this.scrollBox.boxObject.width);
if (minWidth > width) {
- this.setPrefForActiveWindow((function() {
- this.tabbarWidth = minWidth;
- this.updateFloatingTabbar(this.kTABBAR_UPDATE_BY_PREF_CHANGE);
- }).bind(this));
+ this.tabbarWidth = minWidth;
+ this.updateFloatingTabbar(this.kTABBAR_UPDATE_BY_PREF_CHANGE);
}
}
else {
let height = this.tabbarHeight;
let minHeight = Math.max(this.MIN_TABBAR_HEIGHT, this.scrollBox.boxObject.height);
if (minHeight > height) {
- this.setPrefForActiveWindow((function() {
- this.tabbarHeight = minHeight;
- this.updateFloatingTabbar(this.kTABBAR_UPDATE_BY_PREF_CHANGE);
- }).bind(this));
+ this.tabbarHeight = minHeight;
+ this.updateFloatingTabbar(this.kTABBAR_UPDATE_BY_PREF_CHANGE);
}
}
},
@@ -779,6 +776,8 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
var b = this.mTabBrowser;
b.tabContainer.treeStyleTab = this;
+ visuallyselectedTabs(b);
+
this.tabsHash = {};
if (b.tabContainer.parentNode.localName == 'toolbar')
@@ -1179,6 +1178,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
var namedNodes = {
label : this.getTabLabel(aTab),
+ sound : this.getTabSoundButton(aTab),
close : this.getTabClosebox(aTab),
twistyAnchor : this.getTabTwistyAnchorNode(aTab),
twisty : this.getTabTwisty(aTab),
@@ -1246,6 +1246,16 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
nodes.splice(nodes.indexOf(aNamedNodes.closeAnchor)+1, 0, aNamedNodes.close);
}
+ index = nodes.indexOf(aNamedNodes.sound);
+ if (index > -1) {
+ nodes.splice(index, 1);
+ let closeIndex = nodes.indexOf(aNamedNodes.close);
+ if (closeIndex < 0)
+ nodes.push(aNamedNodes.sound);
+ else
+ nodes.splice(closeIndex, 0, aNamedNodes.sound);
+ }
+
index = nodes.indexOf(aNamedNodes.twisty);
if (index > -1) {
nodes.splice(index, 1);
@@ -1355,9 +1365,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
if (!aIsTemporaryChange) {
let positionName = this.normalizeTabbarPosition(pos);
this.setWindowValue(this.kTABBAR_POSITION, positionName);
- this.setPrefForActiveWindow(function() {
- utils.setTreePref('tabbar.position', positionName);
- });
+ utils.setTreePref('tabbar.position', positionName);
}
aOldPosition = aOldPosition || pos;
@@ -1559,6 +1567,11 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
}
}
+ // init() can fail to set the tab-strip-element attribute for the internal box,
+ // because the custom binding can be not applied yet at the time.
+ // We have to set it certainly.
+ this.setTabStripAttribute(this.kTAB_STRIP_ELEMENT, true);
+
var tabs = this.getAllTabs(b);
for (let i = 0, maxi = tabs.length; i < maxi; i++)
{
@@ -1616,6 +1629,16 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
toolboxContainer = null;
scrollInnerBox = null;
scrollInnerBox = null;
+
+ return new Promise((function(aResolve, aReject) {
+ var onInitialized = (function() {
+ this.mTabBrowser.removeEventListener(this.kEVENT_TYPE_TABBAR_INITIALIZED, onInitialized, false);
+ if (!aIsTemporaryChange)
+ delete this._temporaryPosition;
+ aResolve();
+ }).bind(this);
+ this.mTabBrowser.addEventListener(this.kEVENT_TYPE_TABBAR_INITIALIZED, onInitialized, false);
+ }).bind(this));
},
_startListenTabbarEvents : function TSTBrowser_startListenTabbarEvents()
@@ -1642,7 +1665,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
strip.addEventListener('MozMouseHittest', this, true); // to block default behaviors of the tab bar
strip.addEventListener('mousedown', this, true);
strip.addEventListener('click', this, true);
- strip.addEventListener('DOMMouseScroll', this, true);
this.scrollBox.addEventListener('overflow', this, true);
this.scrollBox.addEventListener('underflow', this, true);
@@ -2240,7 +2262,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
destroy : function TSTBrowser_destroy()
{
- this.animationManager.removeTask(this.smoothScrollTask);
+ this.stopSmoothScroll();
Object.keys(this.timers).forEach(function(key) {
if (!this.timers[key])
@@ -2368,7 +2390,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
strip.removeEventListener('MozMouseHittest', this, true);
strip.removeEventListener('mousedown', this, true);
strip.removeEventListener('click', this, true);
- strip.removeEventListener('DOMMouseScroll', this, true);
this.scrollBox.removeEventListener('overflow', this, true);
this.scrollBox.removeEventListener('underflow', this, true);
@@ -2392,25 +2413,34 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
/* toolbar customization */
- syncDestroyTabbar : function TSTBrowser_syncDestroyTabbar()
+ destroyTabbar : function TSTBrowser_destroyTabbar()
{
+ this._endListenTabbarEvents();
+ this.tabbarDNDObserver.endListenEvents();
+
this._lastTreeViewEnabledBeforeDestroyed = this.treeViewEnabled;
this.treeViewEnabled = false;
this.maxTreeLevel = 0;
this._lastTabbarPositionBeforeDestroyed = this.position;
if (this.position != 'top') {
- let self = this;
- this.doAndWaitDOMEvent(
- this.kEVENT_TYPE_TABBAR_POSITION_CHANGED,
- this.window,
- 100,
- function() {
- self.temporaryPosition = 'top';
- }
- );
+ this.temporaryPosition = 'top';
+ return new Promise((function(aResolve, aReject) {
+ var onRestored = (function() {
+ this.mTabBrowser.removeEventListener(this.kEVENT_TYPE_TABBAR_POSITION_CHANGED, onRestored, false);
+ aResolve();
+ }).bind(this);
+ this.mTabBrowser.addEventListener(this.kEVENT_TYPE_TABBAR_POSITION_CHANGED, onRestored, false);
+ }).bind(this))
+ .then(this.destroyTabbarPostProcess.bind(this));
}
-
+ else {
+ this.destroyTabbarPostProcess();
+ return Promise.resolve();
+ }
+ },
+ destroyTabbarPostProcess : function TSTBrowser_destroyTabbarPostProcess()
+ {
this.fixed = true;
var tabbar = this.mTabBrowser.tabContainer;
@@ -2427,10 +2457,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
this.destroyTabStrip(toolbar);
toolbar.classList.add(this.kTABBAR_TOOLBAR_READY);
- this._endListenTabbarEvents();
-
- this.tabbarDNDObserver.endListenEvents();
-
this.window.setTimeout(function(aSelf) {
aSelf.updateCustomizedTabsToolbar();
}, 100, this);
@@ -2445,7 +2471,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
aTabStrip.removeAttribute('orient');
},
- syncReinitTabbar : function TSTBrowser_syncReinitTabbar()
+ reinitTabbar : function TSTBrowser_reinitTabbar()
{
this.ownerToolbar.classList.add(this.kTABBAR_TOOLBAR);
this.ownerToolbar.classList.remove(this.kTABBAR_TOOLBAR_READY);
@@ -2455,23 +2481,16 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
var position = this._lastTabbarPositionBeforeDestroyed || this.position;
delete this._lastTabbarPositionBeforeDestroyed;
- var self = this;
- this.doAndWaitDOMEvent(
- this.kEVENT_TYPE_TABBAR_INITIALIZED,
- this.window,
- 100,
- function() {
- self.initTabbar(position, 'top');
- }
- );
- this.reinitAllTabs(true);
+ this.initTabbar(position, 'top').then((function() {
+ this.reinitAllTabs(true);
- this.tabbarDNDObserver.startListenEvents();
+ this.tabbarDNDObserver.startListenEvents();
- this.treeViewEnabled = this._lastTreeViewEnabledBeforeDestroyed;
- delete this._lastTreeViewEnabledBeforeDestroyed;
+ this.treeViewEnabled = this._lastTreeViewEnabledBeforeDestroyed;
+ delete this._lastTreeViewEnabledBeforeDestroyed;
- this.updateFloatingTabbar(this.kTABBAR_UPDATE_BY_RESET);
+ this.updateFloatingTabbar(this.kTABBAR_UPDATE_BY_RESET);
+ }).bind(this));
},
updateCustomizedTabsToolbar : function TSTBrowser_updateCustomizedTabsToolbar()
@@ -2579,7 +2598,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
switch (aPrefName)
{
case 'extensions.treestyletab.tabbar.position':
- if (this.shouldApplyNewPref)
+ if (this.shouldApplyNewPref('tabbar.position'))
this.position = value;
return;
@@ -2621,7 +2640,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
return this.setTabbrowserAttribute(this.kFIRSTTAB_BORDER, value);
case 'extensions.treestyletab.tabbar.fixed.horizontal':
- if (!this.shouldApplyNewPref)
+ if (!this.shouldApplyNewPref('tabbar.fixed.horizontal'))
return;
this.setTabbrowserAttribute(this.kFIXED+'-horizontal', value ? 'true' : null, b);
case 'extensions.treestyletab.maxTreeLevel.horizontal':
@@ -2631,7 +2650,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
return;
case 'extensions.treestyletab.tabbar.fixed.vertical':
- if (!this.shouldApplyNewPref)
+ if (!this.shouldApplyNewPref('tabbar.fixed.vertical'))
return;
this.setTabbrowserAttribute(this.kFIXED+'-vertical', value ? 'true' : null, b);
case 'extensions.treestyletab.maxTreeLevel.vertical':
@@ -2642,10 +2661,12 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
case 'extensions.treestyletab.tabbar.width':
case 'extensions.treestyletab.tabbar.shrunkenWidth':
- if (!this.shouldApplyNewPref)
+ if (!this.shouldApplyNewPref('tabbar.width'))
return;
+ case 'extensions.treestyletab.tabbar.width.override':
if (!this.autoHide.isResizing && this.isVertical) {
this.removeTabStripAttribute('width');
+ this.tabbarWidth = value;
this.setTabStripAttribute('width', this.autoHide.placeHolderWidthFromMode);
this.updateFloatingTabbar(this.kTABBAR_UPDATE_BY_PREF_CHANGE);
}
@@ -2653,9 +2674,11 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
return;
case 'extensions.treestyletab.tabbar.height':
- if (!this.shouldApplyNewPref)
+ if (!this.shouldApplyNewPref('tabbar.height'))
return;
+ case 'extensions.treestyletab.tabbar.height.override':
this._horizontalTabMaxIndentBase = 0;
+ this.tabbarHeight = value;
this.checkTabsIndentOverflow();
return;
@@ -2850,9 +2873,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
case 'mousedown':
return this.onMouseDown(aEvent);
- case 'DOMMouseScroll':
- return this.onDOMMouseScroll(aEvent);
-
case 'scroll':
return this.onScroll(aEvent);
@@ -2910,7 +2930,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
// toolbar customizing
case 'beforecustomization':
this.toolbarCustomizing = true;
- return this.syncDestroyTabbar();
+ return this.destroyTabbar();
case 'aftercustomization':
// Ignore it, because 'aftercustomization' fired not
// following to 'beforecustomization' is invalid.
@@ -2919,7 +2939,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
if (!this.toolbarCustomizing)
return;
this.toolbarCustomizing = false;
- return this.syncReinitTabbar();
+ return this.reinitTabbar();
case 'customizationchange':
return this.updateCustomizedTabsToolbar();
@@ -2957,14 +2977,16 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
var lastX = this.lastScrollX;
var lastY = this.lastScrollY;
this.clearLastScrollPosition();
- if (!this.smoothScrollTask &&
- !this.scrollBox._smoothScrollTimer) { // don't restore scroll position if another scroll is already running.
- let x = {}, y = {};
- let scrollBoxObject = this.scrollBoxObject;
- scrollBoxObject.getPosition(x, y);
- if (x.value != lastX || y.value != lastY)
- scrollBoxObject.scrollTo(lastX, lastY);
- }
+
+ // don't restore scroll position if another scroll is already running.
+ if (this.isSmoothScrolling())
+ return;
+
+ let x = {}, y = {};
+ let scrollBoxObject = this.scrollBoxObject;
+ scrollBoxObject.getPosition(x, y);
+ if (x.value != lastX || y.value != lastY)
+ scrollBoxObject.scrollTo(lastX, lastY);
},
clearLastScrollPosition : function TSTBrowser_clearLastScrollPosition()
@@ -2987,10 +3009,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
cancelPerformingAutoScroll : function TSTBrowser_cancelPerformingAutoScroll(aOnlyCancel)
{
- if (this.smoothScrollTask) {
- this.animationManager.removeTask(this.smoothScrollTask);
- this.smoothScrollTask = null;
- }
+ this.stopSmoothScroll();
this.clearLastScrollPosition();
if (this.timers['cancelPerformingAutoScroll']) {
@@ -3868,7 +3887,8 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
}).bind(this), 0);
if (!tab.selected &&
- this.mTabBrowser.currentURI.spec == 'about:sessionrestore') {
+ this.mTabBrowser.currentURI.spec == 'about:sessionrestore' &&
+ this.mTabBrowser.selectedBrowser.getAttribute('remote') != 'true') {
// because this is a chrome document, E10S is not applied.
let frame = this.mTabBrowser.contentWindow;
frame = frame.wrappedJSObject || frame;
@@ -4850,11 +4870,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
}
},
- onDOMMouseScroll : function TSTBrowser_onDOMMouseScroll(aEvent)
- {
- this.cancelPerformingAutoScroll();
- },
-
onScroll : function TSTBrowser_onScroll(aEvent)
{
// restore scroll position when a tab is closed.
@@ -4898,7 +4913,8 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
var resizedTopFrame = aEvent.originalTarget.top;
// for E10S tabs, isContentResize is always false.
- var isContentResize = resizedTopFrame == this.mTabBrowser.contentWindow;
+ var isInProcessTab = this.mTabBrowser.selectedBrowser.getAttribute('remote') != 'true';
+ var isContentResize = isInProcessTab && resizedTopFrame == this.mTabBrowser.contentWindow;
var isChromeResize = resizedTopFrame == this.window;
if (isChromeResize && aEvent.originalTarget != resizedTopFrame) {
@@ -5121,17 +5137,16 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
}).bind(this), 0);
},
- onBeforeFullScreenToggle : function TSTBrowser_onBeforeFullScreenToggle()
+ onBeforeFullScreenToggle : function TSTBrowser_onBeforeFullScreenToggle(aEnterFS)
{
if (this.position != 'top') {
- var isEnteringFullScreenMode = !this.window.fullScreen;
// entering to the DOM-fullscreen (ex. YouTube Player)
- if (this.document.mozFullScreen && isEnteringFullScreenMode) {
+ if (this.document.mozFullScreen) {
this.setTabbrowserAttribute(this.kDOM_FULLSCREEN_ACTIVATED, true);
}
else {
if (this.document.documentElement.getAttribute(this.kDOM_FULLSCREEN_ACTIVATED) != 'true') {
- if (isEnteringFullScreenMode)
+ if (aEnterFS)
this.autoHide.startForFullScreen();
else
this.autoHide.endForFullScreen();
@@ -6549,13 +6564,13 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
/* scroll */
- scrollTo : function TSTBrowser_scrollTo(aEndX, aEndY)
+ scrollTo : function TSTBrowser_scrollTo(aEndX, aEndY, aTargetElement)
{
if (this.timers['cancelPerformingAutoScroll'])
return;
if (this.animationEnabled || this.smoothScrollEnabled) {
- this.smoothScrollTo(aEndX, aEndY);
+ this.smoothScrollTo(aEndX, aEndY, null, aTargetElement);
}
else {
try {
@@ -6567,7 +6582,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
}
},
- smoothScrollTo : function TSTBrowser_smoothScrollTo(aEndX, aEndY, aDuration)
+ smoothScrollTo : function TSTBrowser_smoothScrollTo(aEndX, aEndY, aDuration, aTargetElement)
{
this.cancelPerformingAutoScroll(true);
@@ -6580,6 +6595,14 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
var deltaX = aEndX - startX;
var deltaY = aEndY - startY;
+ // Use Firefox's native smooth scroll if possible
+ // because it can be accelerated.
+ if (typeof this.scrollBox._smoothScrollByPixels == 'function') {
+ let amountToScroll = this.isVertical ? deltaY : deltaX ;
+ return this.scrollBox._smoothScrollByPixels(amountToScroll, aTargetElement);
+ }
+ // Otherwise fallback to TST's custom one.
+
var arrowscrollbox = scrollBoxObject.element.parentNode;
if (
arrowscrollbox &&
@@ -6646,7 +6669,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
};
this.animationManager.addTask(
this.smoothScrollTask,
- 0, 0, this.smoothScrollDuration || aDuration, this.window
+ 0, 0, aDuration || this.smoothScrollDuration, this.window
);
},
_getMaxScrollSize : function(aScrollBoxObject) {
@@ -6659,10 +6682,38 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
return [maxX, maxY];
},
smoothScrollTask : null,
+
+ isSmoothScrolling : function TSTBrowser_isSmoothScrolling()
+ {
+ return Boolean(
+ // Firefox's native scroll
+ this.scrollBox._smoothScrollTimer ||
+ // TST's custom one
+ this.smoothScrollTask
+ );
+ },
+
+ stopSmoothScroll : function TSTBrowser_stopSmoothScroll()
+ {
+ // Firefox's native scroll
+ if (typeof this.scrollBox._stopSmoothScroll == 'function')
+ this.scrollBox._stopSmoothScroll();
+
+ // TST's custom one
+ if (this.smoothScrollTask) {
+ this.animationManager.removeTask(this.smoothScrollTask);
+ this.smoothScrollTask = null;
+ }
+ },
scrollToTab : function TSTBrowser_scrollToTab(aTab, aOnlyWhenCurrentTabIsInViewport)
{
- if (!aTab || !aTab.parentNode || this.isTabInViewport(aTab))
+ if (!aTab || !aTab.parentNode)
+ return;
+
+ this.cancelPerformingAutoScroll(true);
+
+ if (this.isTabInViewport(aTab))
return;
var b = this.mTabBrowser;
@@ -6694,25 +6745,34 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
return;
}
- this.scrollTo(targetX, targetY);
+ this.scrollTo(targetX, targetY, aTab);
},
scrollToTabSubtree : function TSTBrowser_scrollToTabSubtree(aTab)
{
if (!aTab.parentNode) // do nothing for closed tab!
return;
- var b = this.mTabBrowser;
- var descendant = this.getDescendantTabs(aTab);
- var parentTabBox = aTab.boxObject;
+ var descendants = this.getDescendantTabs(aTab);
+ return this.scrollToTabs([aTab].concat(descendants));
+ },
+
+ scrollToTabs : function TSTBrowser_scrollToTabs(aTabs)
+ {
+ var firstTab = aTabs[0];
+ if (!firstTab.parentNode) // do nothing for closed tab!
+ return;
+
+ var b = this.mTabBrowser;
+ var parentTabBox = this.getFutureBoxObject(firstTab);
var containerPosition = this.tabStrip.boxObject[this.screenPositionProp];
var containerSize = this.tabStrip.boxObject[this.sizeProp];
var parentPosition = parentTabBox[this.screenPositionProp];
- var lastVisible = aTab;
- for (let i = descendant.length-1; i > -1; i--)
+ var lastVisible = firstTab;
+ for (let i = aTabs.length-1; i > -1; i--)
{
- let tab = descendant[i];
+ let tab = aTabs[i];
if (this.isCollapsed(tab))
continue;
@@ -6724,26 +6784,31 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
break;
}
- if (this.isTabInViewport(aTab) && this.isTabInViewport(lastVisible))
+ this.cancelPerformingAutoScroll(true);
+
+ if (this.isTabInViewport(firstTab) && this.isTabInViewport(lastVisible))
return;
- var lastPosition = lastVisible.boxObject[this.screenPositionProp];
- var tabSize = lastVisible.boxObject[this.sizeProp];
+ var lastVisibleBox = this.getFutureBoxObject(lastVisible);
+ var lastPosition = lastVisibleBox[this.screenPositionProp];
+ var tabSize = lastVisibleBox[this.sizeProp];
- if (lastPosition - parentPosition + tabSize > containerSize - tabSize) { // out of screen
+ var treeHeight = lastPosition - parentPosition + tabSize;
+ var treeIsLargerThanViewport = treeHeight > containerSize - tabSize;
+ if (treeIsLargerThanViewport) {
var endPos = parentPosition - this.getFirstNormalTab(b).boxObject[this.screenPositionProp] - tabSize * 0.5;
var endX = this.isVertical ? 0 : endPos ;
var endY = this.isVertical ? endPos : 0 ;
this.scrollTo(endX, endY);
}
- else if (!this.isTabInViewport(aTab) && this.isTabInViewport(lastVisible)) {
- this.scrollToTab(aTab);
+ else if (!this.isTabInViewport(firstTab) && this.isTabInViewport(lastVisible)) {
+ this.scrollToTab(firstTab);
}
- else if (this.isTabInViewport(aTab) && !this.isTabInViewport(lastVisible)) {
+ else if (this.isTabInViewport(firstTab) && !this.isTabInViewport(lastVisible)) {
this.scrollToTab(lastVisible);
}
else if (parentPosition < containerPosition) {
- this.scrollToTab(aTab);
+ this.scrollToTab(firstTab);
}
else {
this.scrollToTab(lastVisible);
diff --git a/modules/browserUIShowHideObserver.js b/modules/browserUIShowHideObserver.js
index 652b507..df1bae0 100644
--- a/modules/browserUIShowHideObserver.js
+++ b/modules/browserUIShowHideObserver.js
@@ -14,7 +14,7 @@
* The Original Code is the Tree Style Tab.
*
* The Initial Developer of the Original Code is YUKI "Piro" Hiroshi.
- * Portions created by the Initial Developer are Copyright (C) 2014
+ * Portions created by the Initial Developer are Copyright (C) 2014-2015
* the Initial Developer. All Rights Reserved.
*
* Contributor(s): YUKI "Piro" Hiroshi <piro.outsider.reflex at gmail.com>
@@ -36,6 +36,8 @@
const EXPORTED_SYMBOLS = ['BrowserUIShowHideObserver'];
+var DEBUG = false;
+
Components.utils.import('resource://treestyletab-modules/constants.js');
function BrowserUIShowHideObserver(aOwner, aBox) {
@@ -61,6 +63,7 @@ BrowserUIShowHideObserver.prototype = {
childList : true,
attributes : true,
subtree : true,
+ attributeOldValue: DEBUG,
attributeFilter : [
'hidden',
'collapsed',
@@ -103,41 +106,73 @@ BrowserUIShowHideObserver.prototype = {
if (this.handlingAttrChange)
return;
- var size = this.serializeBoxSize();
- if (this.lastSize == size)
+ var target = aMutation.target;
+ var state = this.serializeBoxState(target);
+ if (target.__treestyletab_mutationObserver_lastState == state)
return;
var TST = this.owner.browser.treeStyleTab;
if (
+ // ignore modifications of each tab
+ TST.getTabFromChild(target) ||
+ // ignore modifications in the location bar (ex. identity icon)
+ TST.evaluateXPath(
+ 'ancestor-or-self::xul:textbox',
+ target,
+ Components.interfaces.nsIDOMXPathResult.FIRST_ORDERED_NODE_TYPE
+ ).singleNodeValue
+ )
+ return;
+
+ var toolbarVisible = !TST.ownerToolbar.collapsed;
+ var tabbarVisible = this.owner.browser.tabContainer.visible;
+ var placeHolderVisible = !TST.tabStripPlaceHolder.collapsed;
+ var tabbarVisibilityMismatching = (
+ toolbarVisible != placeHolderVisible ||
+ tabbarVisible != placeHolderVisible
+ );
+
+ if (
// I must ignore show/hide of elements managed by TST,
// to avoid infinity loop.
- aMutation.target.hasAttribute(TreeStyleTabConstants.kTAB_STRIP_ELEMENT) &&
+ target.hasAttribute(TreeStyleTabConstants.kTAB_STRIP_ELEMENT) &&
// However, I have to synchronize visibility of the real
// tab bar and the placeholder's one. If they have
// different visibility, then the tab bar is shown or
// hidden by "auto hide tab bar" feature of someone
// (Pale Moon, Tab Mix Plus, etc.)
- this.owner.browser.tabContainer.visible != TST.tabStripPlaceHolder.collapsed
+ !tabbarVisibilityMismatching
)
return;
+ if (DEBUG) {
+ dump('BrowserUIShowHideObserver_onAttributeModified ' +
+ target.localName + '#' + target.id + '.' + target.className + ', ' +
+ aMutation.attributeName + ', ' +
+ aMutation.oldValue + ' => ' +
+ target.getAttribute(aMutation.attributeName) + '\n');
+ }
+
this.handlingAttrChange = true;
TST.updateFloatingTabbar(TreeStyleTabConstants.kTABBAR_UPDATE_BY_WINDOW_RESIZE);
var w = this.box.ownerDocument.defaultView;
w.setTimeout((function() {
- this.lastSize = this.serializeBoxSize();
+ target.__treestyletab_mutationObserver_lastState = this.serializeBoxState(target);
this.handlingAttrChange = false;
}).bind(this), 10);
},
- serializeBoxSize : function BrowserUIShowHideObserver_serializeBoxSize(aBox)
+ serializeBoxState : function BrowserUIShowHideObserver_serializeBoxState(aElement)
{
- aBox = aBox || this.box.boxObject;
+ aElement = aElement || this.box;
+ var box = aElement.boxObject || {}; // Some times there is no boxObject (ex. HTML element)
return JSON.stringify({
- width : aBox.width,
- height : aBox.height
+ width : box.width || 0,
+ height : box.height || 0,
+ hidden : Boolean(aElement.hidden),
+ collapsed : Boolean(aElement.collapsed)
});
}
};
diff --git a/modules/contentBridge.js b/modules/contentBridge.js
index 3bc0143..8a90fd7 100644
--- a/modules/contentBridge.js
+++ b/modules/contentBridge.js
@@ -14,7 +14,7 @@
* The Original Code is the Tree Style Tab.
*
* The Initial Developer of the Original Code is YUKI "Piro" Hiroshi.
- * Portions created by the Initial Developer are Copyright (C) 2014
+ * Portions created by the Initial Developer are Copyright (C) 2014-2015
* the Initial Developer. All Rights Reserved.
*
* Contributor(s): YUKI "Piro" Hiroshi <piro.outsider.reflex at gmail.com>
@@ -50,6 +50,16 @@ function ContentBridge(aTab, aTabBrowser)
{
this.init(aTab, aTabBrowser);
}
+
+ContentBridge.install = function CB_installScript(aWindow) {
+ aWindow.messageManager.loadFrameScript(TreeStyleTabConstants.CONTENT_SCRIPT_AUTOHIDE, true);
+};
+
+ContentBridge.uninstall = function CB_installScript(aWindow) {
+ aWindow.messageManager.broadcastAsyncMessage(TreeStyleTabConstants.MESSAGE_TYPE, {
+ command : TreeStyleTabConstants.COMMAND_SHUTDOWN
+ });
+};
ContentBridge.prototype = inherit(TreeStyleTabConstants, {
mTab : null,
@@ -62,16 +72,13 @@ ContentBridge.prototype = inherit(TreeStyleTabConstants, {
this.handleMessage = this.handleMessage.bind(this);
this.checkPluginAreaExistenceResolvers = {};
- var manager = this.mTab.linkedBrowser.messageManager;
- // manager.loadFrameScript(this.CONTENT_SCRIPT, true);
- manager.loadFrameScript(this.CONTENT_SCRIPT_AUTOHIDE, true);
+ var manager = this.mTab.ownerDocument.defaultView.messageManager;
manager.addMessageListener(this.MESSAGE_TYPE, this.handleMessage);
},
destroy : function CB_destroy()
{
- var manager = this.mTab.linkedBrowser.messageManager;
+ var manager = this.mTab.ownerDocument.defaultView.messageManager;
manager.removeMessageListener(this.MESSAGE_TYPE, this.handleMessage);
- this.sendAsyncCommand(this.COMMAND_SHUTDOWN);
delete this.mTab;
delete this.mTabBrowser;
@@ -97,7 +104,13 @@ ContentBridge.prototype = inherit(TreeStyleTabConstants, {
},
handleMessage : function CB_handleMessage(aMessage)
{
- // dump(JSON.stringify(aMessage.json)+'\n');
+// dump('*********************handleMessage*******************\n');
+// dump('TARGET IS: '+aMessage.target.localName+'\n');
+// dump(JSON.stringify(aMessage.json)+'\n');
+
+ if (aMessage.target != this.mTab.linkedBrowser)
+ return;
+
switch (aMessage.json.command)
{
case this.COMMAND_REPORT_MOUSEDOWN:
diff --git a/modules/lib/animationManager.js b/modules/lib/animationManager.js
index c8572cb..7dd03f6 100644
--- a/modules/lib/animationManager.js
+++ b/modules/lib/animationManager.js
@@ -19,7 +19,7 @@
// restart after doing something
window['piro.sakura.ne.jp'].animationManager.start();
- license: The MIT License, Copyright (c) 2009-2014 YUKI "Piro" Hiroshi
+ license: The MIT License, Copyright (c) 2009-2015 YUKI "Piro" Hiroshi
original:
http://github.com/piroor/fxaddonlib-animation-manager
*/
@@ -41,7 +41,7 @@ if (typeof window == 'undefined' ||
}
(function() {
- const currentRevision = 18;
+ const currentRevision = 20;
if (!('piro.sakura.ne.jp' in window)) window['piro.sakura.ne.jp'] = {};
@@ -78,9 +78,13 @@ if (typeof window == 'undefined' ||
if (this._windows.indexOf(aRelatedWindow) < 0)
this._windows.push(aRelatedWindow);
+ var startTime = aRelatedWindow ? aRelatedWindow.mozAnimationStartTime : undefined;
+ // mozAnimationStartTime is removed at Firefox 42.
+ // see: https://bugzilla.mozilla.org/show_bug.cgi?id=909154
+ startTime = startTime || Date.now();
this.tasks.push({
task : aTask,
- start : aRelatedWindow ? aRelatedWindow.mozAnimationStartTime : Date.now(),
+ start : startTime,
beginning : aBeginningValue,
change : aTotalChange,
duration : aDuration,
@@ -120,7 +124,7 @@ if (typeof window == 'undefined' ||
return;
this._animatingWindows.push(aWindow);
let self = this;
- aWindow.mozRequestAnimationFrame(function() {
+ aWindow.requestAnimationFrame(function() {
self.processAnimationFrame(aWindow);
});
}, this);
@@ -168,7 +172,7 @@ if (typeof window == 'undefined' ||
this._cleanUpWindows();
if (this._animatingWindows.indexOf(aWindow) > -1) {
let self = this;
- aWindow.mozRequestAnimationFrame(function() {
+ aWindow.requestAnimationFrame(function() {
self.processAnimationFrame(aWindow);
});
}
diff --git a/modules/lib/visuallyselectedTabs.jsm b/modules/lib/visuallyselectedTabs.jsm
new file mode 100644
index 0000000..c636fc2
--- /dev/null
+++ b/modules/lib/visuallyselectedTabs.jsm
@@ -0,0 +1,67 @@
+/*
+ Backporting "visuallyselected" for Firefox 31-40
+
+ See also:
+ http://www.hackermusings.com/2015/06/electrolysis-a-tale-of-tab-switching-and-themes/
+
+ Usage:
+ Components.utils.import(".../path/to/visuallyselectedTabs.jsm");
+ visuallyselectedTabs(gBrowser);
+
+ license: The MIT License, Copyright (c) 2015 YUKI "Piro" Hiroshi
+ original:
+ http://github.com/piroor/fxaddonlib-visuallyselected-tabs
+*/
+
+var EXPORTED_SYMBOLS = ['visuallyselectedTabs'];
+
+Components.utils.import('resource://gre/modules/Services.jsm');
+
+function setVisuallySelected(aNode, aSelected) {
+ if (!aNode || typeof aNode.setAttribute != 'function')
+ return;
+
+ if (aSelected)
+ aNode.setAttribute('visuallyselected', true);
+ else
+ aNode.removeAttribute('visuallyselected');
+
+ Array.forEach(aNode.childNodes, function(aChild) {
+ setVisuallySelected(aChild, aSelected);
+ });
+
+ var anonymousChildren = aNode.ownerDocument.getAnonymousNodes(aNode);
+ if (anonymousChildren && anonymousChildren.length > 0)
+ Array.forEach(anonymousChildren, function(aAnonymousChild) {
+ setVisuallySelected(aAnonymousChild, aSelected);
+ });
+}
+
+function visuallyselectedTabs(aTabBrowser) {
+ if (!aTabBrowser ||
+ aTabBrowser.localName != 'tabbrowser' ||
+ aTabBrowser.__visuallyselectedTabsInstalled ||
+ Services.vc.compare(Services.appinfo.platformVersion, '41.0a1') >= 0)
+ return;
+
+ aTabBrowser.__visuallyselectedTabsInstalled = true;
+
+ function onTabSelect(aEvent) {
+ var prevTab = aEvent.detail && aEvent.detail.previousTab;
+ if (prevTab)
+ setVisuallySelected(prevTab, false);
+
+ setVisuallySelected(aEvent.originalTarget, true);
+ }
+
+ var tabsContainer = aTabBrowser.tabContainer;
+ tabsContainer.addEventListener('TabSelect', onTabSelect, false);
+
+ setVisuallySelected(aTabBrowser.selectedTab, true);
+
+ var document = aTabBrowser.ownerDocument;
+ document.addEventListener('unload', function onUnload(aEvent) {
+ document.removeEventListener('unload', onUnload, false);
+ tabsContainer.removeEventListener('TabSelect', onTabSelect, false);
+ }, false);
+}
diff --git a/modules/tabbarDNDObserver.js b/modules/tabbarDNDObserver.js
index d4204ac..dfd2598 100644
--- a/modules/tabbarDNDObserver.js
+++ b/modules/tabbarDNDObserver.js
@@ -1246,7 +1246,16 @@ catch(e) {
{
case 'text/x-moz-place':
{
- let uri = JSON.parse(aData).uri;
+ let item = JSON.parse(aData);
+ if (item.type == 'text/x-moz-place-container') {
+ // When a blank folder is dropped, just open a dummy tab with the folder name.
+ let children = item.children;
+ if (children && children.length == 0) {
+ let uri = this.treeStyleTab.getGroupTabURI({ title: item.title });
+ return [uri];
+ }
+ }
+ let uri = item.uri;
if (uri)
return uri;
else
diff --git a/modules/utils.js b/modules/utils.js
index da96b50..a3a2f7b 100644
--- a/modules/utils.js
+++ b/modules/utils.js
@@ -43,6 +43,7 @@ const Ci = Components.interfaces;
const Cu = Components.utils;
Cu.import('resource://gre/modules/XPCOMUtils.jsm');
+Cu.import('resource://gre/modules/Timer.jsm');
Cu.import('resource://treestyletab-modules/constants.js');
XPCOMUtils.defineLazyGetter(this, 'window', function() {
@@ -82,11 +83,15 @@ let TreeStyleTabUtils = {
setTreePref : function TSTUtils_setTreePref(aPrefstring, aNewValue)
{
+ if (this.isPrefChanging(aPrefstring))
+ return aNewValue;
return prefs.setPref(TST_PREF_PREFIX + aPrefstring, aNewValue);
},
clearTreePref : function TSTUtils_clearTreePref(aPrefstring)
{
+ if (this.isPrefChanging(aPrefstring))
+ return null;
return prefs.clearPref(TST_PREF_PREFIX + aPrefstring);
},
@@ -332,5 +337,41 @@ let TreeStyleTabUtils = {
return source.indexOf(aMatcher) > -1;
else
return aMatcher.test(source);
+ },
+
+ isPrefChanging : function utils_isPrefChanging(aKey)
+ {
+ return aKey in this.changingPrefs;
+ },
+ isTreePrefChanging : function utils_isPrefChanging(aKey)
+ {
+ return (TST_PREF_PREFIX + aKey) in this.changingPrefs ||
+ this.isPrefChanging(aKey);
+ },
+
+/* Pref Listener */
+ domains : [
+ 'extensions.treestyletab.'
+ ],
+
+ observe : function utils_observe(aSubject, aTopic, aData)
+ {
+ switch (aTopic)
+ {
+ case 'nsPref:changed':
+ this.onPrefChange(aData);
+ return;
+ }
+ },
+
+ changingPrefs : {},
+ onPrefChange : function utils_onPrefChange(aPrefName)
+ {
+ this.changingPrefs[aPrefName] = true;
+ setTimeout((function() {
+ delete this.changingPrefs[aPrefName];
+ }).bind(this));
}
};
+
+prefs.addPrefListener(TreeStyleTabUtils);
diff --git a/modules/window.js b/modules/window.js
index b807215..424f346 100644
--- a/modules/window.js
+++ b/modules/window.js
@@ -65,6 +65,7 @@ XPCOMUtils.defineLazyModuleGetter(this, 'AutoHideWindow', 'resource://treestylet
XPCOMUtils.defineLazyModuleGetter(this, 'TreeStyleTabThemeManager', 'resource://treestyletab-modules/themeManager.js');
XPCOMUtils.defineLazyModuleGetter(this, 'FullscreenObserver', 'resource://treestyletab-modules/fullscreenObserver.js');
XPCOMUtils.defineLazyModuleGetter(this, 'BrowserUIShowHideObserver', 'resource://treestyletab-modules/browserUIShowHideObserver.js');
+XPCOMUtils.defineLazyModuleGetter(this, 'ContentBridge', 'resource://treestyletab-modules/contentBridge.js');
XPCOMUtils.defineLazyServiceGetter(this, 'SessionStore',
'@mozilla.org/browser/sessionstore;1', 'nsISessionStore');
@@ -108,12 +109,10 @@ TreeStyleTabWindow.prototype = inherit(TreeStyleTabBase, {
set position(aValue)
{
var setPosition = (function() {
- this.setPrefForActiveWindow((function() {
- if (this.preInitialized && this.browser.treeStyleTab)
- this.browser.treeStyleTab.position = aValue;
- else
- this.base.position = aValue;
- }).bind(this));
+ if (this.preInitialized && this.browser.treeStyleTab)
+ this.browser.treeStyleTab.position = aValue;
+ else
+ this.base.position = aValue;
}).bind(this);
if ('UndoTabService' in this.window && this.window.UndoTabService.isUndoable()) {
@@ -419,6 +418,8 @@ TreeStyleTabWindow.prototype = inherit(TreeStyleTabBase, {
this.initUninstallationListener();
+ ContentBridge.install(w);
+
w.TreeStyleTabWindowHelper.onBeforeBrowserInit();
this.initTabBrowser(this.browser);
w.TreeStyleTabWindowHelper.onAfterBrowserInit();
@@ -535,6 +536,8 @@ TreeStyleTabWindow.prototype = inherit(TreeStyleTabBase, {
w.messageManager.removeMessageListener('SessionStore:restoreTabContentStarted', this);
+ ContentBridge.uninstall(w);
+
this.fullscreenObserver.destroy();
delete this.fullscreenObserver;
@@ -1369,10 +1372,8 @@ TreeStyleTabWindow.prototype = inherit(TreeStyleTabBase, {
var newFixed = b.getAttribute(this.kFIXED+'-'+orient) != 'true';
this.setTabbrowserAttribute(this.kFIXED+'-'+orient, newFixed || null, b);
- this.setPrefForActiveWindow(function() {
- b.treeStyleTab.fixed = newFixed;
- utils.setTreePref('tabbar.fixed.'+orient, newFixed);
- });
+ b.treeStyleTab.fixed = newFixed;
+ utils.setTreePref('tabbar.fixed.'+orient, newFixed);
b.treeStyleTab.updateTabbarState();
},
diff --git a/skin/classic/treestyletab/Darwin-styled.css b/skin/classic/treestyletab/Darwin-styled.css
index f63070f..d2b111f 100644
--- a/skin/classic/treestyletab/Darwin-styled.css
+++ b/skin/classic/treestyletab/Darwin-styled.css
@@ -14,11 +14,11 @@
#main-window
.tabbrowser-tabs[treestyletab-mode="horizontal"][treestyletab-tabs-indented="true"]
- .tabbrowser-tab:not([selected="true"])
+ .tabbrowser-tab:not([visuallyselected="true"])
.tab-close-button,
#main-window
.tabbrowser-tabs[treestyletab-mode="horizontal"][treestyletab-tabs-indented="true"]
- .tabbrowser-tab[selected="true"]
+ .tabbrowser-tab[visuallyselected="true"]
.tab-close-button {
background-position: left bottom;
background-repeat: repeat-x;
@@ -26,15 +26,15 @@
#main-window:-moz-window-inactive
.tabbrowser-tabs[treestyletab-mode="horizontal"][treestyletab-tabs-indented="true"]
- .tabbrowser-tab:not([selected="true"])
+ .tabbrowser-tab:not([visuallyselected="true"])
.tab-close-button,
#main-window:-moz-window-inactive
.tabbrowser-tabs[treestyletab-mode="horizontal"][treestyletab-tabs-indented="true"]
- .tabbrowser-tab[selected="true"]
+ .tabbrowser-tab[visuallyselected="true"]
.tab-close-button,
#main-window:-moz-window-inactive
.tabbrowser-tabs[treestyletab-mode="horizontal"][treestyletab-tabs-indented="true"]
- .tabbrowser-tab[selected="true"]
+ .tabbrowser-tab[visuallyselected="true"]
.tab-close-button {
background-position: left bottom;
background-repeat: repeat-x;
diff --git a/skin/classic/treestyletab/Linux-config.css b/skin/classic/treestyletab/Linux-config.css
index 29df337..1644b2b 100644
--- a/skin/classic/treestyletab/Linux-config.css
+++ b/skin/classic/treestyletab/Linux-config.css
@@ -1,32 +1,32 @@
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
radio[pane="prefpane-appearance"]:hover,
-radio[pane="prefpane-appearance"][selected="true"] {
+radio[pane="prefpane-appearance"][visuallyselected="true"] {
-moz-image-region: rect(0px, 32px, 32px, 0px);
}
radio[pane="prefpane-style"]:hover,
-radio[pane="prefpane-style"][selected="true"] {
+radio[pane="prefpane-style"][visuallyselected="true"] {
-moz-image-region: rect(0px, 32px, 32px, 0px);
}
radio[pane="prefpane-menu"]:hover,
-radio[pane="prefpane-menu"][selected="true"] {
+radio[pane="prefpane-menu"][visuallyselected="true"] {
-moz-image-region: rect(0px, 32px, 32px, 0px);
}
radio[pane="prefpane-tab"]:hover,
-radio[pane="prefpane-tab"][selected="true"] {
+radio[pane="prefpane-tab"][visuallyselected="true"] {
-moz-image-region: rect(0px, 64px, 32px, 32px);
}
radio[pane="prefpane-autohide"]:hover,
-radio[pane="prefpane-autohide"][selected="true"] {
+radio[pane="prefpane-autohide"][visuallyselected="true"] {
-moz-image-region: rect(0px, 64px, 32px, 32px);
}
radio[pane="prefpane-advanced"]:hover,
-radio[pane="prefpane-advanced"][selected="true"] {
+radio[pane="prefpane-advanced"][visuallyselected="true"] {
-moz-image-region: rect(0px, 224px, 32px, 192px);
}
diff --git a/skin/classic/treestyletab/Linux-styled.css b/skin/classic/treestyletab/Linux-styled.css
index 57eb5b9..bd0dd49 100644
--- a/skin/classic/treestyletab/Linux-styled.css
+++ b/skin/classic/treestyletab/Linux-styled.css
@@ -4,9 +4,9 @@
/* horizontal tree */
.tabbrowser-tabs[treestyletab-tabbar-position="top"][treestyletab-tabs-indented="true"]
- .tabbrowser-tab:not([selected="true"]),
+ .tabbrowser-tab:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-tabbar-position="top"][treestyletab-tabs-indented="true"]
- .tabbrowser-tab[selected="true"] {
+ .tabbrowser-tab[visuallyselected="true"] {
border-radius: 0 0 0 0;
-moz-border-radius: 0 0 0 0;
height: 1.5em;
diff --git a/skin/classic/treestyletab/WINNT-styled.css b/skin/classic/treestyletab/WINNT-styled.css
index f1e7257..c159009 100644
--- a/skin/classic/treestyletab/WINNT-styled.css
+++ b/skin/classic/treestyletab/WINNT-styled.css
@@ -1,13 +1,13 @@
/* horizontal tree */
.tabbrowser-tabs[treestyletab-tabbar-position="top"][treestyletab-tabs-indented="true"]
- .tabbrowser-tab:not([selected="true"]),
+ .tabbrowser-tab:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-tabbar-position="top"][treestyletab-tabs-indented="true"]
- .tabbrowser-tab[selected="true"],
+ .tabbrowser-tab[visuallyselected="true"],
.tabbrowser-tabs[treestyletab-tabbar-position="top"][treestyletab-tabs-indented="true"]
- .tabbrowser-tab:hover:not([selected="true"]),
+ .tabbrowser-tab:hover:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-tabbar-position="top"][treestyletab-tabs-indented="true"]
- .tabbrowser-tab:hover[selected="true"] {
+ .tabbrowser-tab:hover[visuallyselected="true"] {
border-radius: 0 0 0 0;
-moz-border-radius: 0 0 0 0;
border-top-width: 1px;
diff --git a/skin/classic/treestyletab/base.css b/skin/classic/treestyletab/base.css
index 6e69a51..7d70423 100644
--- a/skin/classic/treestyletab/base.css
+++ b/skin/classic/treestyletab/base.css
@@ -103,9 +103,9 @@
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])[movingtab]
.tabbrowser-tab[beforeselected]:not([last-visible-tab])::after,
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:not([selected]):not([afterselected-visible]):not([afterhovered]):not([first-visible-tab]):not(:hover)::before,
+ .tabbrowser-tab:not([visuallyselected]):not([afterselected-visible]):not([afterhovered]):not([first-visible-tab]):not(:hover)::before,
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"]):not([overflow])
- .tabbrowser-tab[last-visible-tab]:not([selected]):not([beforehovered]):not(:hover)::after {
+ .tabbrowser-tab[last-visible-tab]:not([visuallyselected]):not([beforehovered]):not(:hover)::after {
/* hide it anyway!! */
content: none;
display: none;
@@ -126,8 +126,8 @@
https://github.com/piroor/treestyletab/pull/843
*/
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab:not([selected="true"]),
+ .tabbrowser-tab:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"] {
+ .tabbrowser-tab[visuallyselected="true"] {
z-index: auto;
}
diff --git a/skin/classic/treestyletab/metal/base.css b/skin/classic/treestyletab/metal/base.css
index ae062b7..d38fe58 100644
--- a/skin/classic/treestyletab/metal/base.css
+++ b/skin/classic/treestyletab/metal/base.css
@@ -28,9 +28,9 @@
.tabbrowser-tabs[treestyletab-mode="vertical"]
.tabbrowser-tab:first-child:hover,
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab:first-child[selected="true"],
+ .tabbrowser-tab:first-child[visuallyselected="true"],
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab:first-child[selected="true"]:hover {
+ .tabbrowser-tab:first-child[visuallyselected="true"]:hover {
margin-top: 5px !important;
}
@@ -146,7 +146,7 @@ tabbrowser[treestyletab-tabbar-position="right"]
.tabbrowser-tab:hover
.tab-icon,
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"]:hover
+ .tabbrowser-tab[visuallyselected="true"]:hover
.tab-icon {
background: url("icon-bg.png") no-repeat right center !important;
}
@@ -154,7 +154,7 @@ tabbrowser[treestyletab-tabbar-position="right"]
.tabbrowser-tab:hover
.tab-icon,
.tabbrowser-tabs[treestyletab-tab-contents-inverted="true"]
- .tabbrowser-tab[selected="true"]:hover
+ .tabbrowser-tab[visuallyselected="true"]:hover
.tab-icon {
background-position: left center !important;
}
diff --git a/skin/classic/treestyletab/metal/tab.css b/skin/classic/treestyletab/metal/tab.css
index e5e85bb..90a7953 100644
--- a/skin/classic/treestyletab/metal/tab.css
+++ b/skin/classic/treestyletab/metal/tab.css
@@ -5,9 +5,9 @@
.tabbrowser-tabs[treestyletab-mode="vertical"]
.tabbrowser-tab:hover,
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"],
+ .tabbrowser-tab[visuallyselected="true"],
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"]:hover {
+ .tabbrowser-tab[visuallyselected="true"]:hover {
appearance: none !important;
-moz-appearance: none !important;
border: 2px solid transparent !important;
@@ -34,9 +34,9 @@
:-moz-any(.tabbrowser-tab:not([pinned]),
.tabbrowser-tab[pinned]:not([titlechanged])):hover,
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"],
+ .tabbrowser-tab[visuallyselected="true"],
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"]:hover {
+ .tabbrowser-tab[visuallyselected="true"]:hover {
background: none transparent !important;
}
@@ -58,44 +58,44 @@
width: 0;
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:hover .tab-background:not([selected="true"]) {
+ .tabbrowser-tab:hover .tab-background:not([visuallyselected="true"]) {
background-image: none;
}
/* for Mac OS X */
.tabbrowser-tabs[treestyletab-mode="vertical"]
- :-moz-any(.tab-content:not([pinned]):not([selected="true"]),
- .tab-content[pinned]:not([titlechanged]):not([selected="true"]),
- .tab-content:not([pinned])[selected="true"],
- .tab-content[pinned]:not([titlechanged])[selected="true"],
- .tab-background-start:not([selected="true"]),
- .tab-background-middle:not([selected="true"]):not([pinned]),
- .tab-background-middle:not([selected="true"])[pinned]:not([titlechanged]),
- .tab-background-end:not([selected="true"]),
- .tab-background-start[selected="true"],
- .tab-background-middle[selected="true"],
- .tab-background-end[selected="true"]) {
+ :-moz-any(.tab-content:not([pinned]):not([visuallyselected="true"]),
+ .tab-content[pinned]:not([titlechanged]):not([visuallyselected="true"]),
+ .tab-content:not([pinned])[visuallyselected="true"],
+ .tab-content[pinned]:not([titlechanged])[visuallyselected="true"],
+ .tab-background-start:not([visuallyselected="true"]),
+ .tab-background-middle:not([visuallyselected="true"]):not([pinned]),
+ .tab-background-middle:not([visuallyselected="true"])[pinned]:not([titlechanged]),
+ .tab-background-end:not([visuallyselected="true"]),
+ .tab-background-start[visuallyselected="true"],
+ .tab-background-middle[visuallyselected="true"],
+ .tab-background-end[visuallyselected="true"]) {
border: 0 none !important;
background: transparent !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
- :-moz-any(.tab-background-start:not([selected="true"]),
- .tab-background-middle:not([selected="true"]),
- .tab-background-end:not([selected="true"]),
- .tab-background-start[selected="true"],
- .tab-background-middle[selected="true"],
- .tab-background-end[selected="true"]) {
+ :-moz-any(.tab-background-start:not([visuallyselected="true"]),
+ .tab-background-middle:not([visuallyselected="true"]),
+ .tab-background-end:not([visuallyselected="true"]),
+ .tab-background-start[visuallyselected="true"],
+ .tab-background-middle[visuallyselected="true"],
+ .tab-background-end[visuallyselected="true"]) {
mask: none !important;
}
/* highlighted pinned tabs */
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[pinned][titlechanged]:not([selected="true"]) .tab-background {
+ .tabbrowser-tab[pinned][titlechanged]:not([visuallyselected="true"]) .tab-background {
background-image: radial-gradient(circle farthest-corner at 50% 3px,
Highlight 3%,
rgba(255, 255, 255, 0) 80%);
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[pinned][titlechanged]:not([selected="true"]):hover .tab-background {
+ .tabbrowser-tab[pinned][titlechanged]:not([visuallyselected="true"]):hover .tab-background {
background-image: radial-gradient(circle farthest-corner at 50% 3px,
Highlight 3%,
rgba(255, 255, 255, 0) 100%);
@@ -165,7 +165,7 @@
/* foreground, left */
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"]:not([pinned])
+ .tabbrowser-tab[visuallyselected="true"]:not([pinned])
.tab-stack {
-moz-border-image: url("tab-active-selected-l.png") 10 5 10 10 / 10px 5px 10px 10px !important;
-moz-border-image-slice: 10 5 10 10 fill !important;
@@ -174,7 +174,7 @@
/* foreground, right */
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-tab-inverted="true"]
- .tabbrowser-tab[selected="true"]:not([pinned])
+ .tabbrowser-tab[visuallyselected="true"]:not([pinned])
.tab-stack {
-moz-border-image: url("tab-active-selected-r.png") 10 10 10 5 / 10px 10px 10px 5px !important;
-moz-border-image-slice: 10 10 10 5 fill !important;
@@ -191,10 +191,10 @@
.tabbrowser-tab:hover
.tab-content[pinned],
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected]:not(:hover)
+ .tabbrowser-tab[visuallyselected]:not(:hover)
.tab-content[pinned],
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected]:hover
+ .tabbrowser-tab[visuallyselected]:hover
.tab-content[pinned] {
-moz-border-image: none !important;
border-image: none !important;
@@ -209,10 +209,10 @@
.tab-content[pinned]:not([titlechanged]),
.tabbrowser-tabs[treestyletab-mode="vertical"]
.tabbrowser-tab:not(:hover)
- .tab-content[pinned][selected],
+ .tab-content[pinned][visuallyselected],
.tabbrowser-tabs[treestyletab-mode="vertical"]
.tabbrowser-tab:hover
- .tab-content[pinned][selected] {
+ .tab-content[pinned][visuallyselected] {
background: none !important;
}
@@ -221,9 +221,9 @@
.tabbrowser-tabs[treestyletab-mode="vertical"]
.tabbrowser-tab[pinned]:hover,
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[pinned][selected="true"]:not(:hover),
+ .tabbrowser-tab[pinned][visuallyselected="true"]:not(:hover),
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[pinned][selected="true"]:hover {
+ .tabbrowser-tab[pinned][visuallyselected="true"]:hover {
border: none !important;
border-radius: 0 !important;
-moz-border-radius: 0 !important;
@@ -234,9 +234,9 @@
.tabbrowser-tabs[treestyletab-mode="vertical"]
.tabbrowser-tab[pinned]:not([titlechanged]):hover,
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[pinned][selected="true"]:not(:hover),
+ .tabbrowser-tab[pinned][visuallyselected="true"]:not(:hover),
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[pinned][selected="true"]:hover {
+ .tabbrowser-tab[pinned][visuallyselected="true"]:hover {
background: none !important;
}
@@ -256,10 +256,10 @@
.tab-content[pinned],
.tabbrowser-tabs[treestyletab-mode="vertical"]
.tabbrowser-tab:not(:hover)
- .tab-content[pinned][selected="true"],
+ .tab-content[pinned][visuallyselected="true"],
.tabbrowser-tabs[treestyletab-mode="vertical"]
.tabbrowser-tab:hover
- .tab-content[pinned][selected="true"] {
+ .tab-content[pinned][visuallyselected="true"] {
line-height: 1 !important;
border: 1px solid #666666 !important;
border-radius: 4px !important;
@@ -275,19 +275,19 @@
.tab-content[pinned]:not([titlechanged]),
.tabbrowser-tabs[treestyletab-mode="vertical"]
.tabbrowser-tab:not(:hover)
- .tab-content[selected="true"][pinned],
+ .tab-content[visuallyselected="true"][pinned],
.tabbrowser-tabs[treestyletab-mode="vertical"]
.tabbrowser-tab:hover
- .tab-content[selected="true"][pinned] {
+ .tab-content[visuallyselected="true"][pinned] {
background: #9d9d9d !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
.tabbrowser-tab:not(:hover)
- .tab-content[selected="true"][pinned],
+ .tab-content[visuallyselected="true"][pinned],
.tabbrowser-tabs[treestyletab-mode="vertical"]
.tabbrowser-tab:hover
- .tab-content[selected="true"][pinned] {
+ .tab-content[visuallyselected="true"][pinned] {
background-color: #b3b2b3 !important;
}
@@ -319,7 +319,7 @@
/* foreground, left */
:root:-moz-window-inactive
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"]:not([pinned])
+ .tabbrowser-tab[visuallyselected="true"]:not([pinned])
.tab-stack{
-moz-border-image: url("tab-inactive-selected-l.png") 10 5 10 10 / 10px 5px 10px 10px !important;
-moz-border-image-slice: 10 5 10 10 fill !important;
@@ -329,7 +329,7 @@
/* foreground, right */
:root:-moz-window-inactive
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-tab-inverted="true"]
- .tabbrowser-tab[selected="true"]:not([pinned])
+ .tabbrowser-tab[visuallyselected="true"]:not([pinned])
.tab-stack{
-moz-border-image: url("tab-inactive-selected-r.png") 10 10 10 5 / 10px 10px 10px 5px !important;
-moz-border-image-slice: 10 10 10 5 fill !important;
@@ -353,11 +353,11 @@
:root:-moz-window-inactive
.tabbrowser-tabs[treestyletab-mode="vertical"]
.tabbrowser-tab
- .tab-content[pinned][selected="true"],
+ .tab-content[pinned][visuallyselected="true"],
:root:-moz-window-inactive
.tabbrowser-tabs[treestyletab-mode="vertical"]
.tabbrowser-tab:hover
- .tab-content[pinned][selected="true"] {
+ .tab-content[pinned][visuallyselected="true"] {
background: #e4e4e4 !important;
}
diff --git a/skin/classic/treestyletab/sidebar/sidebar.css b/skin/classic/treestyletab/sidebar/sidebar.css
index 0e77691..16189a8 100644
--- a/skin/classic/treestyletab/sidebar/sidebar.css
+++ b/skin/classic/treestyletab/sidebar/sidebar.css
@@ -68,7 +68,7 @@
width: 0;
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:hover .tab-background:not([selected="true"]) {
+ .tabbrowser-tab:hover .tab-background:not([visuallyselected="true"]) {
background-image: none;
}
@@ -126,9 +126,9 @@ tabbrowser[treestyletab-mode="vertical"]
-moz-border-left-colors: none !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab:not([pinned]):not([selected="true"]),
+ .tabbrowser-tab:not([pinned]):not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[pinned]:not([titlechanged]):not([selected="true"]) {
+ .tabbrowser-tab[pinned]:not([titlechanged]):not([visuallyselected="true"]) {
background: transparent !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
@@ -150,17 +150,17 @@ tabbrowser[treestyletab-mode="vertical"]
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"] {
+ .tabbrowser-tab[visuallyselected="true"] {
border-top: 1px solid #94A1C0 !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"] {
+ .tabbrowser-tab[visuallyselected="true"] {
background: -moz-linear-gradient(top, #A0B0CF, #7386AB) repeat-x !important;
}
#main-window:-moz-window-inactive
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"] {
+ .tabbrowser-tab[visuallyselected="true"] {
border-top: 1px solid #979797 !important;
background: -moz-linear-gradient(top, #B4B4B4, #8A8A8A) repeat-x !important;
}
@@ -184,7 +184,7 @@ tabbrowser[treestyletab-mode="vertical"]
opacity: 0.46; /* turn black into #8a8a8a */
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"]
+ .tabbrowser-tab[visuallyselected="true"]
.tab-close-button
image {
list-style-image: url("closetab-white.png");
@@ -193,16 +193,16 @@ tabbrowser[treestyletab-mode="vertical"]
/* Always display the favicon at 100% opacity */
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab:not(:hover):not([selected="true"])
+ .tabbrowser-tab:not(:hover):not([visuallyselected="true"])
.tab-icon-image,
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab:not(:hover):not([selected="true"])
+ .tabbrowser-tab:not(:hover):not([visuallyselected="true"])
.tab-throbber {
opacity: 1.0 !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab:not(:hover):not([selected="true"])
+ .tabbrowser-tab:not(:hover):not([visuallyselected="true"])
.tab-close-button {
display: none !important;
}
@@ -219,7 +219,7 @@ tabbrowser[treestyletab-mode="vertical"]
margin-bottom: 1px;
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"] .tab-text {
+ .tabbrowser-tab[visuallyselected="true"] .tab-text {
font-weight: bold !important;
color: #ffffff !important;
text-shadow: 0 1px #404040 !important;
@@ -241,12 +241,12 @@ tabbrowser[treestyletab-mode="vertical"]
text-shadow: none !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"]
+ .tabbrowser-tab[visuallyselected="true"]
.treestyletab-counter-container {
background-color: #ffffff !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"]
+ .tabbrowser-tab[visuallyselected="true"]
.treestyletab-counter {
color: #91a0c0 !important;
}
@@ -258,13 +258,13 @@ tabbrowser[treestyletab-mode="vertical"]
}
#main-window:-moz-window-inactive
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"]
+ .tabbrowser-tab[visuallyselected="true"]
.treestyletab-counter-container {
background-color: #ffffff !important;
}
#main-window:-moz-window-inactive
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"]
+ .tabbrowser-tab[visuallyselected="true"]
.treestyletab-counter {
color: #929292 !important;
}
@@ -276,13 +276,13 @@ tabbrowser[treestyletab-mode="vertical"]
First we need to disable the standard settings from TreeStyleTab.
Its initial CSS rules are quite explicit. :( */
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"],
+ .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"],
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"]:hover,
+ .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"]:hover,
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]),
+ .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]):hover {
+ .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]):hover {
-moz-border-top-colors: none !important;
-moz-border-bottom-colors: none !important;
-moz-border-right-colors: none !important;
@@ -291,7 +291,7 @@ tabbrowser[treestyletab-mode="vertical"]
/* Round blue rectangle around tabs that are dropping targets. */
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="self"]:not([selected="true"]) {
+ .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="self"]:not([visuallyselected="true"]) {
background: #d0def5 !important;
border: 2px solid #577bf3 !important; /* not OSX's colour but Firefox's */
border-radius: 8px !important;
@@ -301,13 +301,13 @@ tabbrowser[treestyletab-mode="vertical"]
/* White-blue-white separator for drop indicator. */
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"][selected="true"],
+ .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"][visuallyselected="true"],
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"][selected="true"]:hover,
+ .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"][visuallyselected="true"]:hover,
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"]:not([selected="true"]),
+ .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"]:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"]:not([selected="true"]):hover {
+ .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"]:not([visuallyselected="true"]):hover {
-moz-border-image: url("dropmarker.png") 12 0 0 11 fill / 12px 0 0 11px !important;
-moz-border-image-outset: 6px 0 0 0 !important;
border-image: url("dropmarker.png") 12 0 0 11 fill / 12px 0 0 11px !important;
@@ -315,13 +315,13 @@ tabbrowser[treestyletab-mode="vertical"]
}
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"][selected="true"],
+ .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"][visuallyselected="true"],
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"][selected="true"]:hover,
+ .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"][visuallyselected="true"]:hover,
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"]:not([selected="true"]),
+ .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"]:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"]:not([selected="true"]):hover {
+ .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"]:not([visuallyselected="true"]):hover {
-moz-border-image: url("dropmarker.png") 0 0 12 11 fill / 0 0 12px 11px !important;
-moz-border-image-outset: 0 0 6px 0 !important;
border-image: url("dropmarker.png") 0 0 12 11 fill / 0 0 12px 11px !important;
@@ -376,7 +376,7 @@ tabbrowser[treestyletab-mode="vertical"]
/* for rightside tab bar: "display:none" breaks the order of tab contents. */
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab:not(:hover):not([selected="true"])
+ .tabbrowser-tab:not(:hover):not([visuallyselected="true"])
.tab-close-button {
display: -moz-box !important;
visibility: collapse !important;
@@ -393,7 +393,7 @@ tabbrowser[treestyletab-mode="vertical"]
.tab-close-button:hover
image,
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"]
+ .tabbrowser-tab[visuallyselected="true"]
.tab-close-button
image {
-moz-image-region: auto !important;
@@ -414,29 +414,29 @@ tabbrowser[treestyletab-mode="vertical"]
/* for Mac OS X */
.tabbrowser-tabs[treestyletab-mode="vertical"]
- :-moz-any(.tab-content:not([selected="true"]):not([pinned]),
- .tab-content:not([selected="true"])[pinned]:not([titlechanged]),
- .tab-content[selected="true"]) {
+ :-moz-any(.tab-content:not([visuallyselected="true"]):not([pinned]),
+ .tab-content:not([visuallyselected="true"])[pinned]:not([titlechanged]),
+ .tab-content[visuallyselected="true"]) {
border: 0 none !important;
background: transparent !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
- :-moz-any(.tab-background-start:not([selected="true"]),
- .tab-background-middle:not([selected="true"]),
- .tab-background-end:not([selected="true"]),
- .tab-background-start[selected="true"],
- .tab-background-middle[selected="true"],
- .tab-background-end[selected="true"]) {
+ :-moz-any(.tab-background-start:not([visuallyselected="true"]),
+ .tab-background-middle:not([visuallyselected="true"]),
+ .tab-background-end:not([visuallyselected="true"]),
+ .tab-background-start[visuallyselected="true"],
+ .tab-background-middle[visuallyselected="true"],
+ .tab-background-end[visuallyselected="true"]) {
mask: none !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
- :-moz-any(.tab-background-start:not([selected="true"]),
- .tab-background-middle:not([selected="true"]):not([pinned]),
- .tab-background-middle:not([selected="true"])[pinned]:not([titlechanged]),
- .tab-background-end:not([selected="true"]),
- .tab-background-start[selected="true"],
- .tab-background-middle[selected="true"],
- .tab-background-end[selected="true"]) {
+ :-moz-any(.tab-background-start:not([visuallyselected="true"]),
+ .tab-background-middle:not([visuallyselected="true"]):not([pinned]),
+ .tab-background-middle:not([visuallyselected="true"])[pinned]:not([titlechanged]),
+ .tab-background-end:not([visuallyselected="true"]),
+ .tab-background-start[visuallyselected="true"],
+ .tab-background-middle[visuallyselected="true"],
+ .tab-background-end[visuallyselected="true"]) {
background: transparent !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
@@ -463,13 +463,13 @@ tabbrowser[treestyletab-mode="vertical"]
/* highlighted pinned tabs */
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[pinned][titlechanged]:not([selected="true"]) {
+ .tabbrowser-tab[pinned][titlechanged]:not([visuallyselected="true"]) {
background-image: radial-gradient(circle farthest-corner at 50% 3px,
Highlight 3%,
rgba(255, 255, 255, 0) 80%);
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[pinned][titlechanged]:not([selected="true"]):hover {
+ .tabbrowser-tab[pinned][titlechanged]:not([visuallyselected="true"]):hover {
background-image: radial-gradient(circle farthest-corner at 50% 3px,
Highlight 3%,
rgba(255, 255, 255, 0) 100%);
@@ -478,7 +478,7 @@ tabbrowser[treestyletab-mode="vertical"]
/* for Multiple Tab Handler */
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab:not(:hover):not([selected="true"])[multipletab-ready-to-close="true"]
+ .tabbrowser-tab:not(:hover):not([visuallyselected="true"])[multipletab-ready-to-close="true"]
.tab-close-button {
visibility: visible !important;
}
diff --git a/skin/classic/treestyletab/square/Darwin.css b/skin/classic/treestyletab/square/Darwin.css
index 0d9af46..75d135f 100644
--- a/skin/classic/treestyletab/square/Darwin.css
+++ b/skin/classic/treestyletab/square/Darwin.css
@@ -28,7 +28,7 @@ tabbrowser:not([treestyletab-style="vertigo"])[treestyletab-mode="vertical"]
.tab-close-button,
#main-window:-moz-window-inactive
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"]
+ .tabbrowser-tab[visuallyselected="true"]
.tab-close-button,
#main-window:-moz-window-inactive
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
@@ -36,7 +36,7 @@ tabbrowser:not([treestyletab-style="vertigo"])[treestyletab-mode="vertical"]
.tab-close-button,
#main-window:-moz-window-inactive
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
- .tabbrowser-tab[selected="true"]
+ .tabbrowser-tab[visuallyselected="true"]
.tab-close-button {
height: auto;
margin: 0 !important;
diff --git a/skin/classic/treestyletab/square/base.css b/skin/classic/treestyletab/square/base.css
index 75d2f1b..6d1adb2 100644
--- a/skin/classic/treestyletab/square/base.css
+++ b/skin/classic/treestyletab/square/base.css
@@ -78,7 +78,7 @@
width: 0;
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:hover .tab-background:not([selected="true"]) {
+ .tabbrowser-tab:hover .tab-background:not([visuallyselected="true"]) {
background-image: none;
}
@@ -86,9 +86,9 @@
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
.tabbrowser-tab,
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab[selected="true"],
+ .tabbrowser-tab[visuallyselected="true"],
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:not([selected="true"]) {
+ .tabbrowser-tab:not([visuallyselected="true"]) {
appearance: none !important;
-moz-appearance: none !important;
min-height: 2em;
@@ -112,27 +112,27 @@
/* override "-moz-menutext" color defined by the default theme, because it is too bright on Ubuntu */
#TabsToolbar:not(:-moz-lwtheme):not([treestyletab-tabbar-position="top"])
#tabbrowser-tabs
- .tabbrowser-tab:not([selected]) {
+ .tabbrowser-tab:not([visuallyselected]) {
color: -moz-dialogtext !important;
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
.tabbrowser-tab:not([pinned]),
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:not([pinned])[selected="true"],
+ .tabbrowser-tab:not([pinned])[visuallyselected="true"],
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:not([pinned]):not([selected="true"]) {
+ .tabbrowser-tab:not([pinned]):not([visuallyselected="true"]) {
background: -moz-dialog repeat-x !important;
}
/* highlighted pinned tabs */
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[pinned][titlechanged]:not([selected="true"]) {
+ .tabbrowser-tab[pinned][titlechanged]:not([visuallyselected="true"]) {
background-image: radial-gradient(circle farthest-corner at 50% 3px,
ThreeDHighlight 3%,
Highlight 80%);
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[pinned][titlechanged]:not([selected="true"]):hover {
+ .tabbrowser-tab[pinned][titlechanged]:not([visuallyselected="true"]):hover {
background-image: radial-gradient(circle farthest-corner at 50% 3px,
ThreeDHighlight 3%,
Highlight 100%);
@@ -140,11 +140,11 @@
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
:-moz-any(.tabbrowser-tab[pinned]:not([titlechanged]),
- .tabbrowser-tab[pinned]:not([titlechanged])[selected="true"],
- .tabbrowser-tab[pinned]:not([titlechanged]):not([selected="true"]),
+ .tabbrowser-tab[pinned]:not([titlechanged])[visuallyselected="true"],
+ .tabbrowser-tab[pinned]:not([titlechanged]):not([visuallyselected="true"]),
.tabbrowser-tab[pinned][titlechanged]:not(.treestyletab-faviconized),
- .tabbrowser-tab[pinned][titlechanged]:not(.treestyletab-faviconized)[selected="true"],
- .tabbrowser-tab[pinned][titlechanged]:not(.treestyletab-faviconized):not([selected="true"])),
+ .tabbrowser-tab[pinned][titlechanged]:not(.treestyletab-faviconized)[visuallyselected="true"],
+ .tabbrowser-tab[pinned][titlechanged]:not(.treestyletab-faviconized):not([visuallyselected="true"])),
:root[tabFx2Compatible-flags~="mac"]
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
:-moz-any(.tabbrowser-tab[pinned],
@@ -152,35 +152,35 @@
background: -moz-dialog repeat-x !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-firsttab-border="true"]
- .tabbrowser-tab:not([pinned="true"]):not([selected="true"]):first-child {
+ .tabbrowser-tab:not([pinned="true"]):not([visuallyselected="true"]):first-child {
-moz-border-top-colors: ThreeDShadow transparent !important;
}
/* for Mac OS X */
.tabbrowser-tabs[treestyletab-mode="vertical"]
- :-moz-any(.tab-content:not([pinned="true"]):not([selected="true"]),
- .tab-content:not([pinned="true"])[selected="true"]) {
+ :-moz-any(.tab-content:not([pinned="true"]):not([visuallyselected="true"]),
+ .tab-content:not([pinned="true"])[visuallyselected="true"]) {
border: 0 none !important;
background: transparent !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
- :-moz-any(.tab-background-start:not([selected="true"]),
- .tab-background-middle:not([selected="true"]),
- .tab-background-end:not([selected="true"]),
- .tab-background-start[selected="true"],
- .tab-background-middle[selected="true"],
- .tab-background-end[selected="true"]) {
+ :-moz-any(.tab-background-start:not([visuallyselected="true"]),
+ .tab-background-middle:not([visuallyselected="true"]),
+ .tab-background-end:not([visuallyselected="true"]),
+ .tab-background-start[visuallyselected="true"],
+ .tab-background-middle[visuallyselected="true"],
+ .tab-background-end[visuallyselected="true"]) {
mask: none !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
- :-moz-any(.tab-background-start:not([selected="true"]),
- .tab-background-middle:not([selected="true"]):not([pinned]),
- .tab-background-middle:not([selected="true"])[pinned]:not([titlechanged]),
- .tab-background-end:not([selected="true"]),
- .tab-background-start[selected="true"],
- .tab-background-middle[selected="true"],
- .tab-background-end[selected="true"]) {
+ :-moz-any(.tab-background-start:not([visuallyselected="true"]),
+ .tab-background-middle:not([visuallyselected="true"]):not([pinned]),
+ .tab-background-middle:not([visuallyselected="true"])[pinned]:not([titlechanged]),
+ .tab-background-end:not([visuallyselected="true"]),
+ .tab-background-start[visuallyselected="true"],
+ .tab-background-middle[visuallyselected="true"],
+ .tab-background-end[visuallyselected="true"]) {
background: transparent !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
@@ -208,17 +208,19 @@
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab[selected="true"] {
+ .tabbrowser-tab[visuallyselected="true"] {
margin: 0 !important;
-moz-border-top-colors: ThreeDHighlight transparent !important;
-moz-border-bottom-colors: ThreeDShadow transparent !important;
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab[selected="true"]:not([pinned]) {
+ .tabbrowser-tab[visuallyselected="true"]:not([pinned]) {
padding: 0 0.2em !important;
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab[selected="true"] {
+ .tabbrowser-tab:not([pinned])[visuallyselected="true"],
+.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
+ .tabbrowser-tab[pinned][visuallyselected="true"] {
background-color: ThreeDHighlight !important;
}
@@ -233,16 +235,16 @@
.tabbrowser-tabs[treestyletab-mode="vertical"]
.tabbrowser-tab,
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"],
+ .tabbrowser-tab[visuallyselected="true"],
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab:not([selected="true"]) {
+ .tabbrowser-tab:not([visuallyselected="true"]) {
border-left: 2px solid !important;
-moz-border-left-colors: ThreeDLightShadow transparent !important;
border-right: 2px solid !important;
-moz-border-right-colors: ThreeDLightShadow transparent !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[selected="true"] {
+ .tabbrowser-tab[visuallyselected="true"] {
-moz-border-left-colors: ThreeDLightShadow transparent !important;
-moz-border-right-colors: ThreeDLightShadow transparent !important;
}
@@ -256,9 +258,9 @@
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
.tabbrowser-tab,
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
- .tabbrowser-tab[selected="true"],
+ .tabbrowser-tab[visuallyselected="true"],
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
- .tabbrowser-tab:not([selected="true"]) {
+ .tabbrowser-tab:not([visuallyselected="true"]) {
border-right: 2px solid !important;
-moz-border-right-colors: ThreeDShadow transparent !important;
border-left: 2px solid !important;
@@ -277,15 +279,15 @@
/* padding */
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab[selected="true"]:not([pinned]),
+ .tabbrowser-tab[visuallyselected="true"]:not([pinned]),
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:not([selected="true"]):not([pinned]),
+ .tabbrowser-tab:not([visuallyselected="true"]):not([pinned]),
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
.tabbrowser-tab
- .tab-content[selected="true"]:not([pinned]),
+ .tab-content[visuallyselected="true"]:not([pinned]),
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
.tabbrowser-tab
- .tab-content:not([selected="true"]):not([pinned]) {
+ .tab-content:not([visuallyselected="true"]):not([pinned]) {
padding: 0 0.2em !important;
}
diff --git a/skin/classic/treestyletab/square/disable-closebox-bg.css b/skin/classic/treestyletab/square/disable-closebox-bg.css
index 0b75ed8..c2c02a7 100644
--- a/skin/classic/treestyletab/square/disable-closebox-bg.css
+++ b/skin/classic/treestyletab/square/disable-closebox-bg.css
@@ -13,7 +13,7 @@
.tabbrowser-tab
.tab-close-button,
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab[selected="true"]
+ .tabbrowser-tab[visuallyselected="true"]
.tab-close-button {
height: auto;
background: transparent;
diff --git a/skin/classic/treestyletab/square/mixed.css b/skin/classic/treestyletab/square/mixed.css
index 11afafc..a5fcfda 100644
--- a/skin/classic/treestyletab/square/mixed.css
+++ b/skin/classic/treestyletab/square/mixed.css
@@ -7,57 +7,57 @@
}
.tabbrowser-tabs[treestyletab-style~="color"]:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:not([selected="true"]):hover {
+ .tabbrowser-tab:not([visuallyselected="true"]):hover {
-moz-border-top-colors: #e0e8f6 transparent !important;
-moz-border-left-colors: #e0e8f6 transparent !important;
}
.tabbrowser-tabs[treestyletab-style~="color"]:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:not([selected="true"]):not([pinned]):hover,
+ .tabbrowser-tab:not([visuallyselected="true"]):not([pinned]):hover,
.tabbrowser-tabs[treestyletab-style~="color"]:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:not([selected="true"])[pinned]:not([titlechanged]):hover {
+ .tabbrowser-tab:not([visuallyselected="true"])[pinned]:not([titlechanged]):hover {
background-color: #e0e8f6 !important;
}
.tabbrowser-tabs[treestyletab-style~="color"][treestyletab-mode="vertical"][treestyletab-firsttab-border="true"]
- .tabbrowser-tab:first-child:not([selected="true"]):hover {
+ .tabbrowser-tab:first-child:not([visuallyselected="true"]):hover {
-moz-border-top-colors: ThreeDShadow #e0e8f6 !important;
}
.tabbrowser-tabs[treestyletab-style~="color"][treestyletab-mode="vertical"][treestyletab-tab-inverted="true"]
- .tabbrowser-tab:not([selected="true"]):hover {
+ .tabbrowser-tab:not([visuallyselected="true"]):hover {
-moz-border-right-colors: #e0e8f6 transparent !important;
}
.tabbrowser-tabs[treestyletab-style~="color"]:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab[selected="true"] {
+ .tabbrowser-tab[visuallyselected="true"] {
-moz-border-top-colors: #c1d2ee transparent !important;
-moz-border-left-colors: #c1d2ee transparent !important;
}
.tabbrowser-tabs[treestyletab-style~="color"]:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab[selected="true"] {
+ .tabbrowser-tab[visuallyselected="true"] {
background-color: #c1d2ee !important;
}
.tabbrowser-tabs[treestyletab-style~="color"][treestyletab-mode="vertical"][treestyletab-firsttab-border="true"]
- .tabbrowser-tab:first-child[selected="true"] {
+ .tabbrowser-tab:first-child[visuallyselected="true"] {
-moz-border-top-colors: ThreeDShadow #c1d2ee !important;
}
.tabbrowser-tabs[treestyletab-style~="color"][treestyletab-mode="vertical"][treestyletab-tab-inverted="true"]
- .tabbrowser-tab[selected="true"] {
+ .tabbrowser-tab[visuallyselected="true"] {
-moz-border-right-colors: #c1d2ee transparent !important;
}
.tabbrowser-tabs[treestyletab-style~="color"]:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab[selected="true"]:hover {
+ .tabbrowser-tab[visuallyselected="true"]:hover {
-moz-border-top-colors: #d1e2fe transparent !important;
-moz-border-left-colors: #d1e2fe transparent !important;
}
.tabbrowser-tabs[treestyletab-style~="color"]:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab[selected="true"]:hover {
+ .tabbrowser-tab[visuallyselected="true"]:hover {
background-color: #d1e2fe !important;
}
.tabbrowser-tabs[treestyletab-style~="color"][treestyletab-mode="vertical"][treestyletab-firsttab-border="true"]
- .tabbrowser-tab:first-child[selected="true"]:hover {
+ .tabbrowser-tab:first-child[visuallyselected="true"]:hover {
-moz-border-top-colors: ThreeDShadow #d1e2fe !important;
}
.tabbrowser-tabs[treestyletab-style~="color"][treestyletab-mode="vertical"][treestyletab-tab-inverted="true"]
- .tabbrowser-tab[selected="true"]:hover {
+ .tabbrowser-tab[visuallyselected="true"]:hover {
-moz-border-right-colors: #d1e2fe transparent !important;
}
diff --git a/skin/classic/treestyletab/square/tab-surface.css b/skin/classic/treestyletab/square/tab-surface.css
index 068e1f4..b910e21 100644
--- a/skin/classic/treestyletab/square/tab-surface.css
+++ b/skin/classic/treestyletab/square/tab-surface.css
@@ -24,7 +24,7 @@
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
.tabbrowser-tab
- .tab-background[selected="true"] {
+ .tab-background[visuallyselected="true"] {
background-color: #c1d2ee !important;
background-image: -moz-linear-gradient(
top,
@@ -50,7 +50,7 @@
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
.tabbrowser-tab:hover
- .tab-background[selected="true"] {
+ .tab-background[visuallyselected="true"] {
background-color: #d1e2fe !important;
background-image: -moz-linear-gradient(
top,
diff --git a/skin/classic/treestyletab/square/vertigo.css b/skin/classic/treestyletab/square/vertigo.css
index 2edc2e2..68bd86b 100644
--- a/skin/classic/treestyletab/square/vertigo.css
+++ b/skin/classic/treestyletab/square/vertigo.css
@@ -4,12 +4,12 @@
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
.tabbrowser-tab:not([pinned]),
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:not([pinned]):not([selected="true"]),
+ .tabbrowser-tab:not([pinned]):not([visuallyselected="true"]),
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
:-moz-any(.tabbrowser-tab[pinned]:not([titlechanged]),
- .tabbrowser-tab[pinned]:not([titlechanged]):not([selected="true"]),
+ .tabbrowser-tab[pinned]:not([titlechanged]):not([visuallyselected="true"]),
.tabbrowser-tab[pinned][titlechanged]:not(.treestyletab-faviconized),
- .tabbrowser-tab[pinned][titlechanged]:not(.treestyletab-faviconized):not([selected="true"])),
+ .tabbrowser-tab[pinned][titlechanged]:not(.treestyletab-faviconized):not([visuallyselected="true"])),
:root[tabFx2Compatible-flags~="mac"]
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
:-moz-any(.tabbrowser-tab[pinned],
@@ -18,71 +18,71 @@
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:not([selected="true"]) {
+ .tabbrowser-tab:not([visuallyselected="true"]) {
-moz-border-top-colors: transparent transparent !important;
-moz-border-bottom-colors: transparent transparent !important;
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:not([selected="true"]):not([pinned]),
+ .tabbrowser-tab:not([visuallyselected="true"]):not([pinned]),
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:not([selected="true"])[pinned]:not([titlechanged])) {
+ .tabbrowser-tab:not([visuallyselected="true"])[pinned]:not([titlechanged])) {
background: transparent !important;
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:not([selected="true"]):hover {
+ .tabbrowser-tab:not([visuallyselected="true"]):hover {
-moz-border-top-colors: #e0e8f6 #e0e8f6 !important;
-moz-border-bottom-colors: #e0e8f6 #e0e8f6 !important;
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:not([selected="true"]):not([pinned]):hover,
+ .tabbrowser-tab:not([visuallyselected="true"]):not([pinned]):hover,
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:not([selected="true"])[pinned]:not([titlechanged]):hover {
+ .tabbrowser-tab:not([visuallyselected="true"])[pinned]:not([titlechanged]):hover {
background-color: #e0e8f6 !important;
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab[selected="true"] {
+ .tabbrowser-tab[visuallyselected="true"] {
-moz-border-top-colors: #c1d2ee #c1d2ee !important;
-moz-border-bottom-colors: #c1d2ee #c1d2ee !important;
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab[selected="true"] {
+ .tabbrowser-tab[visuallyselected="true"] {
background-color: #c1d2ee !important;
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab[selected="true"]:hover {
+ .tabbrowser-tab[visuallyselected="true"]:hover {
-moz-border-top-colors: #d1e2fe #d1e2fe !important;
-moz-border-bottom-colors: #d1e2fe #d1e2fe !important;
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab[selected="true"]:hover {
+ .tabbrowser-tab[visuallyselected="true"]:hover {
background-color: #d1e2fe !important;
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:not([selected="true"]),
+ .tabbrowser-tab:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-tab-inverted="true"]
- .tabbrowser-tab:not([selected="true"]) {
+ .tabbrowser-tab:not([visuallyselected="true"]) {
-moz-border-left-colors: transparent transparent !important;
-moz-border-right-colors: transparent transparent !important;
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab:not([selected="true"]):hover,
+ .tabbrowser-tab:not([visuallyselected="true"]):hover,
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-tab-inverted="true"]
- .tabbrowser-tab:not([selected="true"]):hover {
+ .tabbrowser-tab:not([visuallyselected="true"]):hover {
-moz-border-left-colors: #e0e8f6 #e0e8f6 !important;
-moz-border-right-colors: #e0e8f6 #e0e8f6 !important;
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab[selected="true"],
+ .tabbrowser-tab[visuallyselected="true"],
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-tab-inverted="true"]
- .tabbrowser-tab[selected="true"] {
+ .tabbrowser-tab[visuallyselected="true"] {
-moz-border-left-colors: #c1d2ee #c1d2ee !important;
-moz-border-right-colors: #c1d2ee #c1d2ee !important;
}
.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
- .tabbrowser-tab[selected="true"]:hover,
+ .tabbrowser-tab[visuallyselected="true"]:hover,
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-tab-inverted="true"]
- .tabbrowser-tab[selected="true"]:hover {
+ .tabbrowser-tab[visuallyselected="true"]:hover {
-moz-border-left-colors: #d1e2fe #d1e2fe !important;
-moz-border-right-colors: #d1e2fe #d1e2fe !important;
}
diff --git a/skin/classic/treestyletab/tmp.css b/skin/classic/treestyletab/tmp.css
index 593d2fd..07dd4a0 100644
--- a/skin/classic/treestyletab/tmp.css
+++ b/skin/classic/treestyletab/tmp.css
@@ -88,6 +88,6 @@
:root[treestyletab-enable-compatibility-tmp="true"]
#tabbrowser-tabs[treestyletab-style]
- .tabbrowser-tab:not([selected="true"]):not([pinned="true"]) {
+ .tabbrowser-tab:not([visuallyselected="true"]):not([pinned="true"]) {
background-image: none !important;
}
diff --git a/skin/classic/treestyletab/twisty/twisty.css b/skin/classic/treestyletab/twisty/twisty.css
index c4d6195..2d4bd79 100644
--- a/skin/classic/treestyletab/twisty/twisty.css
+++ b/skin/classic/treestyletab/twisty/twisty.css
@@ -105,7 +105,7 @@
.tabbrowser-tabs[treestyletab-twisty-style="osx"]
.treestyletab-twisty:active,
.tabbrowser-tabs[treestyletab-twisty-style="osx"]
- .tabbrowser-tab[selected="true"] .treestyletab-twisty {
+ .tabbrowser-tab[visuallyselected="true"] .treestyletab-twisty {
opacity: 1;
}
@@ -116,13 +116,13 @@
.tabbrowser-tabs:not([treestyletab-twisty-style="osx"])
.tabbrowser-tab[treestyletab-twisty-hover="true"] .treestyletab-twisty,
.tabbrowser-tabs[treestyletab-twisty-style="osx"]
- .tabbrowser-tab[selected="true"] .treestyletab-twisty {
+ .tabbrowser-tab[visuallyselected="true"] .treestyletab-twisty {
-moz-image-region: rect(16px, 32px, 32px, 16px);
}
.tabbrowser-tabs:not([treestyletab-twisty-style="osx"])
.tabbrowser-tab[treestyletab-subtree-collapsed="true"][treestyletab-twisty-hover="true"] .treestyletab-twisty,
.tabbrowser-tabs[treestyletab-twisty-style="osx"]
- .tabbrowser-tab[treestyletab-subtree-collapsed="true"][selected="true"] .treestyletab-twisty {
+ .tabbrowser-tab[treestyletab-subtree-collapsed="true"][visuallyselected="true"] .treestyletab-twisty {
-moz-image-region: rect(16px, 16px, 32px, 0);
}
diff --git a/skin/classic/treestyletab/ui-australis.css b/skin/classic/treestyletab/ui-australis.css
index 4ca6ec4..ff65eb4 100644
--- a/skin/classic/treestyletab/ui-australis.css
+++ b/skin/classic/treestyletab/ui-australis.css
@@ -6,3 +6,9 @@
#main-window:not([treestyletab-tabbar-position="top"])[chromemargin]:not([tabsintitlebar]):not([chromemargin^="0,"]) > #titlebar {
display: none;
}
+
+ at media(-moz-windows-glass) {
+ #TabsToolbar:not([treestyletab-tabbar-position="top"]):not(:-moz-lwtheme)::after {
+ display: none !important;
+ }
+}
diff --git a/skin/classic/treestyletab/ui-base.css b/skin/classic/treestyletab/ui-base.css
index f76b195..7cb973b 100644
--- a/skin/classic/treestyletab/ui-base.css
+++ b/skin/classic/treestyletab/ui-base.css
@@ -21,52 +21,52 @@
/* drop markers */
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
- .tabbrowser-tab[treestyletab-drop-position="before"][selected="true"],
+ .tabbrowser-tab[treestyletab-drop-position="before"][visuallyselected="true"],
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
- .tabbrowser-tab[treestyletab-drop-position="before"][selected="true"]:hover,
+ .tabbrowser-tab[treestyletab-drop-position="before"][visuallyselected="true"]:hover,
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
- .tabbrowser-tab[treestyletab-drop-position="before"]:not([selected="true"]),
+ .tabbrowser-tab[treestyletab-drop-position="before"]:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
- .tabbrowser-tab[treestyletab-drop-position="before"]:not([selected="true"]):hover {
+ .tabbrowser-tab[treestyletab-drop-position="before"]:not([visuallyselected="true"]):hover {
-moz-border-left-colors: -moz-dialogtext -moz-dialogtext !important;
}
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
- .tabbrowser-tab[treestyletab-drop-position="after"][selected="true"],
+ .tabbrowser-tab[treestyletab-drop-position="after"][visuallyselected="true"],
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
- .tabbrowser-tab[treestyletab-drop-position="after"][selected="true"]:hover,
+ .tabbrowser-tab[treestyletab-drop-position="after"][visuallyselected="true"]:hover,
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
- .tabbrowser-tab[treestyletab-drop-position="after"]:not([selected="true"]),
+ .tabbrowser-tab[treestyletab-drop-position="after"]:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
- .tabbrowser-tab[treestyletab-drop-position="after"]:not([selected="true"]):hover {
+ .tabbrowser-tab[treestyletab-drop-position="after"]:not([visuallyselected="true"]):hover {
-moz-border-right-colors: -moz-dialogtext -moz-dialogtext !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"],
+ .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"],
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"]:hover,
+ .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"]:hover,
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]),
+ .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]):hover,
+ .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]):hover,
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style][treestyletab-firsttab-border="true"]
- .tabbrowser-tab:first-child[treestyletab-style][selected="true"],
+ .tabbrowser-tab:first-child[treestyletab-style][visuallyselected="true"],
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style][treestyletab-firsttab-border="true"]
- .tabbrowser-tab:first-child[treestyletab-style][selected="true"]:hover,
+ .tabbrowser-tab:first-child[treestyletab-style][visuallyselected="true"]:hover,
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style][treestyletab-firsttab-border="true"]
- .tabbrowser-tab:first-child[treestyletab-drop-position="self"]:not([selected="true"]),
+ .tabbrowser-tab:first-child[treestyletab-drop-position="self"]:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style][treestyletab-firsttab-border="true"]
- .tabbrowser-tab:first-child[treestyletab-drop-position="self"]:not([selected="true"]):hover,
+ .tabbrowser-tab:first-child[treestyletab-drop-position="self"]:not([visuallyselected="true"]):hover,
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"][treestyletab-style]
- .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"],
+ .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"],
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"][treestyletab-style]
- .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"]:hover,
+ .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"]:hover,
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"][treestyletab-style]
- .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]),
+ .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"][treestyletab-style]
- .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]):hover {
+ .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]):hover {
-moz-border-top-colors: -moz-dialogtext -moz-dialogtext !important;
-moz-border-right-colors: -moz-dialogtext -moz-dialogtext !important;
-moz-border-bottom-colors: -moz-dialogtext -moz-dialogtext !important;
@@ -74,73 +74,73 @@
}
.tabbrowser-tabs[treestyletab-mode="vertical"]:not([treestyletab-style])
- .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"],
+ .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"],
.tabbrowser-tabs[treestyletab-mode="vertical"]:not([treestyletab-style])
- .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"]:hover,
+ .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"]:hover,
.tabbrowser-tabs[treestyletab-mode="vertical"]:not([treestyletab-style])
- .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]),
+ .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-mode="vertical"]:not([treestyletab-style])
- .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]):hover,
+ .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]):hover,
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"]:not([treestyletab-style])
- .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"],
+ .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"],
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"]:not([treestyletab-style])
- .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"]:hover,
+ .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"]:hover,
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"]:not([treestyletab-style])
- .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]),
+ .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-tabbar-position="bottom"]:not([treestyletab-style])
- .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]):hover {
+ .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]):hover {
outline: 2px solid !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"][selected="true"],
+ .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"][visuallyselected="true"],
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"][selected="true"]:hover,
+ .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"][visuallyselected="true"]:hover,
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"]:not([selected="true"]),
+ .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"]:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"]:not([selected="true"]):hover,
+ .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"]:not([visuallyselected="true"]):hover,
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style][treestyletab-firsttab-border="true"]
- .tabbrowser-tab:first-child:not([pinned="true"])[treestyletab-drop-position="before"][selected="true"],
+ .tabbrowser-tab:first-child:not([pinned="true"])[treestyletab-drop-position="before"][visuallyselected="true"],
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style][treestyletab-firsttab-border="true"]
- .tabbrowser-tab:first-child:not([pinned="true"])[treestyletab-drop-position="before"][selected="true"]:hover,
+ .tabbrowser-tab:first-child:not([pinned="true"])[treestyletab-drop-position="before"][visuallyselected="true"]:hover,
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style][treestyletab-firsttab-border="true"]
- .tabbrowser-tab:first-child:not([pinned="true"])[treestyletab-drop-position="before"]:not([selected="true"]),
+ .tabbrowser-tab:first-child:not([pinned="true"])[treestyletab-drop-position="before"]:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style][treestyletab-firsttab-border="true"]
- .tabbrowser-tab:first-child:not([pinned="true"])[treestyletab-drop-position="before"]:not([selected="true"]):hover {
+ .tabbrowser-tab:first-child:not([pinned="true"])[treestyletab-drop-position="before"]:not([visuallyselected="true"]):hover {
-moz-border-top-colors: -moz-dialogtext -moz-dialogtext !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"][selected="true"],
+ .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"][visuallyselected="true"],
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"][selected="true"]:hover,
+ .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"][visuallyselected="true"]:hover,
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"]:not([selected="true"]),
+ .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"]:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"]:not([selected="true"]):hover {
+ .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"]:not([visuallyselected="true"]):hover {
-moz-border-bottom-colors: -moz-dialogtext -moz-dialogtext !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab[pinned="true"][treestyletab-drop-position="before"][selected="true"],
+ .tabbrowser-tab[pinned="true"][treestyletab-drop-position="before"][visuallyselected="true"],
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab[pinned="true"][treestyletab-drop-position="before"][selected="true"]:hover,
+ .tabbrowser-tab[pinned="true"][treestyletab-drop-position="before"][visuallyselected="true"]:hover,
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab[pinned="true"][treestyletab-drop-position="before"]:not([selected="true"]),
+ .tabbrowser-tab[pinned="true"][treestyletab-drop-position="before"]:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab[pinned="true"][treestyletab-drop-position="before"]:not([selected="true"]):hover {
+ .tabbrowser-tab[pinned="true"][treestyletab-drop-position="before"]:not([visuallyselected="true"]):hover {
-moz-border-left-colors: -moz-dialogtext -moz-dialogtext !important;
}
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab[pinned="true"][treestyletab-drop-position="after"][selected="true"],
+ .tabbrowser-tab[pinned="true"][treestyletab-drop-position="after"][visuallyselected="true"],
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab[pinned="true"][treestyletab-drop-position="after"][selected="true"]:hover,
+ .tabbrowser-tab[pinned="true"][treestyletab-drop-position="after"][visuallyselected="true"]:hover,
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab[pinned="true"][treestyletab-drop-position="after"]:not([selected="true"]),
+ .tabbrowser-tab[pinned="true"][treestyletab-drop-position="after"]:not([visuallyselected="true"]),
.tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
- .tabbrowser-tab[pinned="true"][treestyletab-drop-position="after"]:not([selected="true"]):hover {
+ .tabbrowser-tab[pinned="true"][treestyletab-drop-position="after"]:not([visuallyselected="true"]):hover {
-moz-border-right-colors: -moz-dialogtext -moz-dialogtext !important;
}
@@ -148,16 +148,16 @@
/* drop marker for horizontal tab bar or the default theme */
.tabbrowser-tabs[treestyletab-tabbar-position="top"]
- .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"]
+ .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"]
.tab-content,
.tabbrowser-tabs[treestyletab-tabbar-position="top"]
- .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"]:hover
+ .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"]:hover
.tab-content,
.tabbrowser-tabs[treestyletab-tabbar-position="top"]
- .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"])
+ .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"])
.tab-content,
.tabbrowser-tabs[treestyletab-tabbar-position="top"]
- .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]):hover
+ .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]):hover
.tab-content {
outline: 2px -moz-dialogtext solid !important;
}
@@ -244,13 +244,13 @@ tabbrowser[treestyletab-drop-position="left"]:not([treestyletab-tabbar-position=
opacity: 0.9 !important;
}
.tabbrowser-tabs[treestyletab-tabbar-autohide]:hover
- .tabbrowser-tab[selected="true"],
+ .tabbrowser-tab[visuallyselected="true"],
.tabbrowser-tabs[treestyletab-tabbar-autohide]:hover
.tabbrowser-tab:hover {
opacity: 0.95 !important;
}
.tabbrowser-tabs[treestyletab-tabbar-autohide]:hover
- .tabbrowser-tab[selected="true"]:hover {
+ .tabbrowser-tab[visuallyselected="true"]:hover {
opacity: 0.98 !important;
}
@@ -348,14 +348,21 @@ tabbrowser[treestyletab-tabbar-position="bottom"]
/* disable highlighting of pinned tabs whici is not faviconized */
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[pinned][titlechanged]:not([selected="true"]):not(.treestyletab-faviconized) {
+ .tabbrowser-tab[pinned][titlechanged]:not([visuallyselected="true"]):not(.treestyletab-faviconized) {
background-image: none;
}
.tabbrowser-tabs[treestyletab-mode="vertical"]
- .tabbrowser-tab[pinned][titlechanged]:not([selected="true"]):not(.treestyletab-faviconized):hover {
+ .tabbrowser-tab[pinned][titlechanged]:not([visuallyselected="true"]):not(.treestyletab-faviconized):hover {
background-image: none;
}
+/* overlay icon */
+.tabbrowser-tabs[treestyletab-mode="vertical"]
+ .tab-content[pinned="true"] > image.tab-icon-overlay {
+ margin-top: -14px !important;
+ -moz-margin-start: -8px !important;
+}
+
/* notification of newly opened tabs in background */
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/tree-style-tab.git
More information about the Pkg-mozext-commits
mailing list