Merge to tip for mstrange's bugs
authorShawn Wilsher <me@shawnwilsher.com>
Thu, 27 Nov 2008 18:28:30 -0800
changeset 22061 8a57e7b85b07cf42f4f92448e0c932e3d049fc9e
parent 22053 367be4e8418664ca249ef4100401a746f6f3e3d5 (current diff)
parent 22060 5be5521bce2ba6d72af95c7f1bf7705da98022bf (diff)
child 22062 0e1de1e5e5b11d7bc3be3d3854dbcb1474f11a75
push idunknown
push userunknown
push dateunknown
milestone1.9.1b3pre
Merge to tip for mstrange's bugs
--- a/browser/themes/pinstripe/browser/browser.css
+++ b/browser/themes/pinstripe/browser/browser.css
@@ -1010,33 +1010,33 @@ richlistitem[selected="true"][current="t
 }
 
 #editBookmarkPanelStarIcon[unstarred] {
   list-style-image: url("chrome://browser/skin/places/unstarred48.png");
 }
 
 #editBookmarkPanel {
   -moz-appearance: none;
-  background-color: rgba(68,68,68,0.9);
-  border: 1px solid rgba(255,255,255,0.15);
-  -moz-border-radius: 8px;
-  -moz-border-radius-topright: 0px ;
-  padding: 10px 8px 6px 8px;
-  margin-top: 4px;
+  -moz-window-shadow: none;
+  -moz-border-image: url(chrome://browser/skin/hud-panel.png) 26 50 22 18 / 26px 50px 22px 18px repeat;
+  margin-right: 27px;
+  margin-top: 1px;
+  padding-top: 8px;
   color: #ffffff;
 }
 
 #editBookmarkPanelTitle {
   font-size: 130%;
   font-weight: bold;
-  margin: 8px 12px 0px 9px;
+  margin: 2px 12px 0px 9px;
 }
 
-#editBookmarkPanel > hbox {
-  -moz-padding-end: 1px;
+#editBookmarkPanel > hbox,
+#editBookmarkPanel > vbox {
+  margin-right: -30px;
 }
 
 /**** HUD style buttons ****/
 
 #editBookmarkPanel > hbox > vbox > hbox > button,
 #editBookmarkPanel > #editBookmarkPanelBottomButtons > button {
   -moz-appearance: none;
   background: url("chrome://browser/skin/hud-style-button-middle-background.png") repeat-x #464646 center center;
@@ -1514,16 +1514,20 @@ toolbarbutton.chevron > .toolbarbutton-m
 }
 
 .openintabs-menuitem {
   list-style-image: none;
 }
 
 /* ::::: tabbrowser ::::: */
 
+tabbrowser > tabbox {
+  margin: 0;
+}
+
 .tab-icon-image {
   width: 16px;
   height: 16px;
   list-style-image: url("chrome://global/skin/tree/item-grayscale.png");
   opacity: 0.6;
   margin-top: 2px;
 }
 
@@ -2084,44 +2088,46 @@ tabpanels.plain {
 #identity-popup-content-box.verifiedDomain > #identity-popup-encryption > vbox > #identity-popup-encryption-icon {
   margin-top: 5px;
   list-style-image: url("chrome://browser/skin/Secure-Glyph-White.png");
 }
 
 /* Popup Bounding Box */
 #identity-popup {
   -moz-appearance: none;
-  background-color: rgba(68,68,68,0.9);
-  border: 1px solid rgba(255,255,255,0.15);
-  -moz-border-radius: 8px;
-  -moz-border-radius-topleft: 0px;
-  padding: 10px 8px 6px 8px;
-  margin-top: -3px;
-  -moz-margin-start: 11px;
-  color:  #ffffff;
+  -moz-window-shadow: none;
+  background-color: transparent;
+  margin-top: -4px;
+  margin-left: -13px;
   min-width: 280px;
+  -moz-border-image: url(chrome://browser/skin/hud-panel.png) 26 18 22 50 / 26px 18px 22px 50px repeat; 
 }
 
 #identity-popup-container {
   -moz-appearance: none;
+  margin: 4px 3px 2px -30px;
   color:  #ffffff;
 }
 
+#identity-popup-content-box {
+  margin-top: 4px;
+}
+
 /* Popup Buttons */
 #identity-popup-more-info-button {
   -moz-appearance: none;
   background: url("chrome://browser/skin/hud-style-button-middle-background.png") repeat-x #464646 center center;
   border: 3px solid;
   -moz-border-top-colors: rgba(0,0,0,0.35) rgba(26,26,26,0.5) rgba(255,255,255,0.4);
   -moz-border-right-colors: rgba(53,53,53,1) rgba(53,53,53,1) rgba(162,162,162,1);
   -moz-border-bottom-colors: rgba(128,128,128,0.35) rgba(0,0,0,0.5) rgba(255,255,255,0.15);
   -moz-border-left-colors: rgba(0,0,0,0.35) rgba(26,26,26,0.5) rgba(255,255,255,0.4);
   -moz-border-radius: 20px;
   padding: 1px 9px;
-  margin: 6px;
+  margin: 10px 0 0;
   min-height: 0px;
   color:  #ffffff;	
 }
 
 #identity-popup-more-info-button > .button-box > .button-text {
   margin: 0 !important;
 }
 
new file mode 100644
index 0000000000000000000000000000000000000000..6cce3dd185150e6b645d7b481f6937c61439887c
GIT binary patch
literal 1619
zc%17D@N?(olHy`uVBq!ia0vp^Za{3r!3-p?Imae4Ffa)O_=LEss;UA-X3w6@fC~2S
z-*0Ma3SmRkK)|9!i{J`?;?ZCL<a&5`0LhMy4v4I-t}e1^#>U3Bwzd-|PE=G>WWWGQ
zN=iC9I&dyfC6JspZJM^WHjpuW`gBY!5a8<SiYD^^|9>E<rlw|PWmR8aZ(?EsG+9$q
zQ%g$=qQD&tq@|@RDk|dR<6B!>;d(<uLm@T-fxNstkkr%D1F8X<24TYk1Ok92SX)~|
z*k)#C5PRL++<=}1+Ux7<J7dNSNa(dRH^;`tdVm2?#Kpy>v$J#N%$YzJR#sL5Nk2b7
zptysBgOrq%HW&a^8W|Y@oh>OT2@hU005l(HR9{~oTqH3uasK@IKwUtWsH>|3MFIl@
zi;9YZgM)z%06Gll@!Z^8xO$*ob8~Zu)j&&ue%zIOIRwbxP!i-9e20O7LqmXBlIgC6
z=Uv8(NQO>+Mg~Tvzy}Ji*reF`M7TINEoYZ-Qc_gskrmqMXs0IIwPP3W4jDraGjT6d
zF@>mzl+<(v|J#!eAGmX8a!}}oD+W%?4@J%Ox7?OzZMMDBd`Ii<C3n5Vn7;kGCg-ze
z#&5rKWxMkAFXHm|RaaUSFgn`Fu&<rAh;#Xt#nV;pX&2Tub9Zdpu&kx7sAA>b)2Gu`
zmB*BA^eqi*3t!IO&bD{+^YgaApkQ|Lba4!+h?{fK)}P5y;P}J4mvyeHOxFp2GqFI9
zx7#66AWEAnYhjbV!}>txeL*)QxEG7v2+aCoylY<H<h{1~k@ZhS{6ET@ojLxNfu*5T
zQtXLQWlGrW$O-1cMFLyDe0f@vuG-MP&_4L@DUH?bvyU%-{`%jv!c~!RJX*Wc-FdIo
z?p?L`@#z$={|l}soUv$s@xySMQ=hqW*V8G6jt`8M+&FjNC!t6#@7i7E);U7Q%Ic;v
zYCid3#HN_iAd+QYd`eQ-P$8gDRwK<qb^mUe{r49=vdT~HEaaN0;j0zAbj!7~k9S|Q
z)#@wWxc5S&m#?;`mabZt)!VZ*CY^>MGS5|xsV)Aw?C!)#GdxtX_Wt>iv)wN4aoQmU
zKJ7CZPcnR)j(dDExaOrau{Eq)rRe6q9K-C#QG9t1?lo06$`tuIaVc_Isx*dN+Q-lI
zQ+%_r+k?q#uNponueg{hcj4*Wm(L6pe(l=Q?{8PH$o8o3fT+*Dy4U*(%-RlBe`rp4
z$Ki8v>EmcYAw#D%a`N8WCl;LxFpjA`-*fKwUa47AjJcR9>K@LUu!5iavxGvcVbw8>
zd7PZq+ES8p4LK4rcj{|i-ma6_Ad#GEYj61Z&i74WvtKTq85!hp=8pb^n>=qtcQxGL
z-}=OU>A^a|lD~6%sw6-6Ph4PTJH<zG*0lvC=Mqll`sS)6n=Ol4*V3r9qH4A$?|ijn
zzxLo<x92^wzr1%Zp387?k<8uLPtLQAO=63l{QB`M$(?V0_w2`|H#L{8)Y3R%a-wWi
zrO76vZPz-tm~AsEy5f^7eAtESzPY7Fc00fPT$z~n3z{b{KhI|>`RvEOoy!<<tbaOW
z@2U9tYX5cH@bdPnpI@K7UCyg}!rF|DD|tm`#fC@I)w8X8{hOQ3lT2^i*=Zg5P5Xke
z&nZckf~jl5n+|>Nod0!pc=+n8w?6;x3{zaOX0q0P$se|<oo0>3MFtzDb_MP{^X!^~
z!g+_JZn4ls(U(P5&tv}n>Gx4f%dq03fB(pp>{*rZs>Ars#tn(jJA`-X^-O);#&_~2
z+qNA-do?r+3a@G040`is(!`@`3t~F&ne%KqV{$B_NA#FQZWK=<SGp31;;PpQX}kOc
oADwV*TfXA$uB0WOBm}>*uXI)OxE#N&A5=zoy85}Sb4q9e0GrK5Jpcdz
--- a/browser/themes/pinstripe/browser/jar.mn
+++ b/browser/themes/pinstripe/browser/jar.mn
@@ -11,16 +11,17 @@ classic.jar:
   skin/classic/browser/contextDialogBackground.png
 * skin/classic/browser/engineManager.css                    (engineManager.css)
   skin/classic/browser/expander-round.png 
   skin/classic/browser/feed-icons.png
   skin/classic/browser/find.png
   skin/classic/browser/find-bar-background.png
   skin/classic/browser/Go-arrow.png
   skin/classic/browser/home.png
+  skin/classic/browser/hud-panel.png
   skin/classic/browser/hud-style-button-middle-background.png
   skin/classic/browser/hud-style-check-box-checked.png
   skin/classic/browser/hud-style-check-box-empty.png
   skin/classic/browser/hud-style-dropmarker-double-arrows.png
   skin/classic/browser/hud-style-expander-closed.png
   skin/classic/browser/hud-style-expander-open.png
   skin/classic/browser/hud-style-new-folder-bar-background-active.png
   skin/classic/browser/hud-style-new-folder-bar-background.gif
--- a/browser/themes/pinstripe/browser/preferences/preferences.css
+++ b/browser/themes/pinstripe/browser/preferences/preferences.css
@@ -213,16 +213,20 @@ prefpane .groupbox-body {
   margin: 12px 4px;
 }
 
 prefpane .groupbox-title {
   background: url("chrome://global/skin/50pct_transparent_grey.png") repeat-x bottom left;
   margin-bottom: 4px;
 }
 
+tabpanels {
+  padding: 20px 7px 7px;
+}
+
 caption {
   border-bottom: 1px solid #ECECEC;
   padding: 4px 4px 0px 0px !important;
 }
 
 #paneMain description,
 #paneContent description,
 #paneAdvanced description,
--- a/toolkit/themes/pinstripe/global/global.css
+++ b/toolkit/themes/pinstripe/global/global.css
@@ -292,16 +292,33 @@ description {
 .text-link[visited="true"] {
   color: purple;
 }
 
 .toolbar-focustarget {
   -moz-user-focus: ignore !important;
 }
 
+notification > button {
+  -moz-appearance: none;
+  background: url("chrome://global/skin/icons/white-gray-gradient.gif") transparent repeat-x center center;
+  -moz-background-clip: padding;
+  border: 1px solid rgba(0, 0, 0, 0.5);
+  -moz-border-radius: 10px;
+  -moz-box-shadow: rgba(255, 255, 255, 0.4) 0 1px 0;
+  padding: 0 5px;
+  margin: 0 3px;
+  min-width: 79px;
+  min-height: 16px;
+}
+
+notification > button:hover:active {
+  background-image: url("chrome://global/skin/icons/white-gray-gradient-active.gif");
+}
+
 /* ::::: XXX - stuff that should live elsewhere ::::: */
 
 /* embedding/components/ui/progressDlg/nsProgressDialog.xul */
 #ok, #cancel, #launch, #reveal, #pauseResume {
 	font: menu !important;
 }
 
 /* toolkit/content/widgets/optionsDialog.xml */
--- a/toolkit/themes/pinstripe/global/notification.css
+++ b/toolkit/themes/pinstripe/global/notification.css
@@ -1,12 +1,12 @@
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
 
 notification {
-  min-height: 24px;
+  padding: 4px 3px 5px;
 }
 
 notification[type="info"] {
   color: rgba(255,255,255,0.95);
   background: url("chrome://global/skin/notification/info-bar-background.png") #404040 repeat-x top left;
   border-top: 1px solid #707070;
   border-bottom: 1px solid #2a2a2a;
 }
@@ -23,74 +23,59 @@ notification[type="critical"] {
   background: url("chrome://global/skin/notification/critical-bar-background.png") #980000 repeat-x top left;
   border-top: 1px solid #e35959;
   border-bottom: 1px solid #5d0000;
 }
 
 .messageImage {
   width: 16px;
   height: 16px;
-  margin: 0px 1px 0px 6px;
+  margin: 0 4px;
 }
 
 /* Default icons for notifications */
 
 notification[type="info"] .messageImage {
   list-style-image: url("chrome://global/skin/icons/information-16.png");
 }
 
 notification[type="warning"] .messageImage {
   list-style-image: url("chrome://global/skin/icons/warning-16.png");
 }
 
 notification[type="critical"] .messageImage {
   list-style-image: url("chrome://global/skin/icons/error-16.png");
 }
 
-.messageText {
-  margin-top: 2px;
-  font-weight: bold;
-  -moz-margin-start: 5px;
-}
-
-button {
-  -moz-appearance: none;
-  background: url("chrome://global/skin/icons/white-gray-gradient.gif") transparent repeat-x center center;
-  -moz-background-clip: padding;
-  border: 1px solid;
-  border-bottom-width: 2px;
-  -moz-border-radius: 10px;
-  -moz-border-top-colors: rgba(0,0,0,0.5);
-  -moz-border-right-colors: rgba(0,0,0,0.5);
-  -moz-border-bottom-colors: rgba(255,255,255,0.35) rgba(0,0,0,0.5);
-  -moz-border-left-colors: rgba(0,0,0,0.5);
-  padding: 0 5px;
-  min-width: 79px;
-  min-height: 17px;
-}
-
-button:hover:active {
-  background-image: url("chrome://global/skin/icons/white-gray-gradient-active.gif");
-}
-
 .notification-inner {
   border: 0 !important;
 }
 
+.messageText {
+  margin: 0 3px !important;
+  padding: 0;
+  font-weight: bold;
+}
+
 .messageCloseButton {
   -moz-appearance: none;
-  -moz-padding-end: 4px;
+  padding: 0;
+  margin: 0 2px;
   list-style-image: url("chrome://global/skin/icons/closetab.png") !important;
   border: none;
 }
 
 .messageCloseButton > .toolbarbutton-text {
   display: none;
 }
 
+.messageCloseButton > .toolbarbutton-icon {
+  padding: 0;
+}
+
 .messageCloseButton:hover {
   list-style-image: url("chrome://global/skin/icons/closetab-hover.png") !important;
 }
 
 .messageCloseButton:hover:active {
   list-style-image: url("chrome://global/skin/icons/closetab-active.png") !important;
 }
 
--- a/toolkit/themes/pinstripe/global/tabbox.css
+++ b/toolkit/themes/pinstripe/global/tabbox.css
@@ -1,109 +1,136 @@
-/********** Tab widget *********/
-/*******************************/
-/* This Mac-specific CSS styles tabs that are located on the top of their content,
- * as Macintosh tabs generally are.  An example of using bottom tab images can be 
- * found in EditorToolbar.css in classic/editor/.
- *******************************/
+/* ===== tabbox.css =====================================================
+  == Styles used by the XUL tabbox element
+   
+    The default style of these tabs is that of an NSTabView with tabs at
+    the top in the "regular" size. These tabs can be used with or without
+    a tabbox element.
+    For bottom tabs you should use the "tabs-bottom" class on the tabbox
+    or the tabs element. Bottom tabs use a style that's similar to the
+    one used in Adium.
+  ======================================================================= */
 
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
 
-/*** TAB: TOP <tab> ***/
+tabbox {
+  margin: 0 5px;
+}
+
+tabpanels {
+  -moz-appearance: tabpanels; 
+  padding: 33px 15px 15px;
+}
+
+tabs {
+  -moz-box-align: center;
+  font: menu;
+}
+
+tabbox > tabs {
+  padding: 0 10px;
+  margin-bottom: -12px;
+  position: relative;
+}
 
 tab {
   -moz-appearance: tab;
   -moz-box-align: stretch;
-  color				: #000000;
-  padding: 3px;
 }
 
-.tab-text {
-  font				: menu;
+tab > .tab-middle {
+  padding: 2px 6px;
 }
 
-tabs {
-  padding			: 0px;
-  margin-bottom: -2px;
+tab[first-tab=true] {
+  -moz-padding-start: 2px;
 }
 
+tab[last-tab=true] {
+  -moz-padding-end: 2px;
+}
 
-tabs.tabs-bottom {
-  padding-left: 6px;
-  padding-right: 6px;
+.tabs-left,
+.tabs-right  {
+  -moz-box-flex: 1;
 }
 
-.tabs-left, .tabs-right  {
-	-moz-box-flex: 1 !important;
-}
-/*** TAB: BOTTOM <tab class="tab-bottom"> ***/
-/* Found in editor.xul & editorOverlay.xul 
- * SMALL TABS FOR NOW */
+/* Tabs at the bottom
+ * These tabs are smaller, left aligned and don't extend into the tabpanel.
+ */
 
-.tab-bottom {
-  margin-bottom: 2px;
-  margin-top: 2px;
-  -moz-box-align: center;
+tabbox.tabs-bottom > tabpanels {
+  padding: 10px;
 }
 
-.tab-bottom > .tab-middle {
-  padding: 0 6px 0 6px;
-  margin-bottom: 2px;
+tabbox.tabs-bottom > tabs,
+tabs.tabs-bottom {
+  background-color: rgba(0, 0, 0, 0.1);
+  padding: 0;
+  margin: 0;
+  border-top: 2px solid;
+  -moz-border-top-colors: #888 rgba(0, 0, 0, 0.08);
+  -moz-box-align: start;
+  font: message-box;
 }
-  
 
-.tab-bottom > .tab-middle > .tab-text {
-  font: message-box;
-  font-weight: bold !important;
-  margin: 0 0 -1px 0 !important;
-  padding: 0 !important;
+tabbox.tabs-bottom > tabs > .tabs-left,
+tabs.tabs-bottom > .tabs-left {
+  -moz-box-flex: 0;
 }
 
-    /* top tabs */
-tabbox[orient="vertical"] tabs[orient="horizontal"] tab { 
-  padding: 0px;
-  margin: 0px;
+tabbox.tabs-bottom > tabs > tab,
+tabs.tabs-bottom > tab {
+  -moz-appearance: none;
+  margin: -1px 0 0;
+  padding: 0 0 2px 0;
+  position: relative;
+  -moz-border-end: 1px solid rgba(0, 0, 0, 0.19);
 }
 
-	/* bottom tabs */
-tabbox[orient="vertical"] tabpanels + tabs[orient="horizontal"] tab { 
-  border-top: none;
-  border-bottom: 1px solid #666666;
-  border-left: 1px solid white;
-  border-right: 1px solid #666666;
-  -moz-border-radius: 0px 0px 8px 8px;
-  padding: 1px 5px 3px 5px;
-  margin: 1px 2px 1px 2px;
+tabbox.tabs-bottom > tabs > tab > .tab-middle,
+tabs.tabs-bottom > tab > .tab-middle {
+  -moz-box-align: stretch;
+  padding: 1px 2px 0 2px;
 }
 
-	/* left tabs */
-tabbox[orient="horizontal"] tabs[orient="vertical"] tab { 
-  border-right: none;
-  -moz-border-radius: 8px 0px 0px 8px;
-  padding-right: 1px;
-  margin: 2px 1px 2px 1px;
+tabbox.tabs-bottom > tabs > tab:not([selected=true]):hover,
+tabs.tabs-bottom > tab:not([selected=true]):hover {
+  background-color: rgba(0, 0, 0, 0.1);
+  -moz-border-end-color: rgba(0, 0, 0, 0.1);
 }
 
-	/* right tabs */
-tabbox[orient="horizontal"] tabpanels + tabs[orient="vertical"]  tab { 
-  border-top: 1px solid white;
-  border-bottom: 1px solid #666666;
-  border-left: none;
-  border-right: 1px solid #666666;
-  -moz-border-radius: 0px 8px 8px 0px;
-  padding: 3px 5px 1px 5px;
-  margin: 2px 1px 2px 1px;
+tabbox.tabs-bottom > tabs > tab[selected=true],
+tabs.tabs-bottom > tab[selected=true] {
+  border: solid #888;
+  border-width: 0 2px 2px;
+  -moz-border-radius: 2px;
+  -moz-border-left-colors: rgba(0, 0, 0, 0.08) #888;
+  -moz-border-right-colors: rgba(0, 0, 0, 0.08) #888;
+  -moz-border-bottom-colors: rgba(0, 0, 0, 0.08) #888;
+  -moz-margin-end: -1px;
+  margin-top: -2px;
+  margin-bottom: 1px;
+  padding: 0;
 }
 
-tabbox { 
-  border: none;
+tabbox.tabs-bottom > tabs > tab[beforeselected=true],
+tabs.tabs-bottom > tab[beforeselected=true] {
+  -moz-border-end-color: transparent;
+  -moz-margin-end: -2px;
+}
+
+tabbox.tabs-bottom > tabs > tab:not([selected=true])[first-tab=true],
+tabs.tabs-bottom > tab:not([selected=true])[first-tab=true] {
+  -moz-border-start: 4px solid transparent;
 }
 
-tabpanels {
-  -moz-appearance: tabpanels; 
-  border-top: 0px;
-  border-bottom: 2px ridge #000000;
-  border-left: 2px groove #000000;
-  border-right: 2px ridge #000000;
-  padding: 15px 5px 5px 5px;
-  background-color		: #EEEEEE;
-  margin-bottom: 10px;
+tabbox.tabs-bottom > tabs > tab[selected=true][first-tab=true],
+tabs.tabs-bottom > tab[selected=true][first-tab=true] {
+  -moz-margin-start: 2px;
 }
+
+tabbox.tabs-bottom,
+tabbox.tabs-bottom > tabpanels,
+tabbox.tabs-bottom > tabs > tab[selected=true] > .tab-middle,
+tabs.tabs-bottom > tab[selected=true] > .tab-middle {
+  -moz-appearance: dialog;
+}
--- a/widget/src/cocoa/nsLookAndFeel.mm
+++ b/widget/src/cocoa/nsLookAndFeel.mm
@@ -48,16 +48,24 @@
 nsLookAndFeel::nsLookAndFeel() : nsXPLookAndFeel()
 {
 }
 
 nsLookAndFeel::~nsLookAndFeel()
 {
 }
 
+static nscolor GetColorFromNSColor(NSColor* aColor)
+{
+  NSColor* deviceColor = [aColor colorUsingColorSpaceName:NSDeviceRGBColorSpace];
+  return NS_RGB((unsigned int)([deviceColor redComponent] * 255.0),
+                (unsigned int)([deviceColor greenComponent] * 255.0),
+                (unsigned int)([deviceColor blueComponent] * 255.0));
+}
+
 nsresult nsLookAndFeel::NativeGetColor(const nsColorID aID, nscolor &aColor)
 {
   nsresult res = NS_OK;
   
   switch (aID) {
     case eColor_WindowBackground:
     {
       nsCOMPtr<nsIInternetConfigService> icService_wb (do_GetService(NS_INTERNETCONFIGSERVICE_CONTRACTID));
@@ -204,17 +212,17 @@ nsresult nsLookAndFeel::NativeGetColor(c
       //lighter of 2 possible highlight colours available
       res = GetMacBrushColor(kThemeBrushButtonActiveLightHighlight, aColor, NS_RGB(0xFF,0xFF,0xFF));
       break;
     case eColor_buttonshadow:
       //darker of 2 possible shadow colours available
       res = GetMacBrushColor(kThemeBrushButtonActiveDarkShadow, aColor, NS_RGB(0x77,0x77,0x77));
       break;
     case eColor_graytext:
-      res = GetMacTextColor(kThemeTextColorDialogInactive, aColor, NS_RGB(0x77,0x77,0x77));
+      aColor = GetColorFromNSColor([NSColor disabledControlTextColor]);
       break;
     case eColor_inactiveborder:
       //ScrollBar DelimiterInactive looks like an odd constant to use, but gives the right colour in most themes, 
       //also if you look at where this colour is *actually* used, it is pretty much what we want
       res = GetMacBrushColor(kThemeBrushScrollBarDelimiterInactive, aColor, NS_RGB(0x55,0x55,0x55));
       break;
     case eColor_inactivecaption:
       //best guess. Usually right in most themes I think
--- a/widget/src/cocoa/nsNativeThemeCocoa.h
+++ b/widget/src/cocoa/nsNativeThemeCocoa.h
@@ -96,20 +96,18 @@ protected:
 
   // HITheme drawing routines
   void DrawFrame(CGContextRef context, HIThemeFrameKind inKind,
                  const HIRect& inBoxRect, PRBool inIsDisabled,
                  PRInt32 inState);
   void DrawProgress(CGContextRef context, const HIRect& inBoxRect,
                     PRBool inIsIndeterminate, PRBool inIsHorizontal,
                     PRInt32 inValue, PRInt32 inMaxValue, nsIFrame* aFrame);
-  void DrawTab(CGContextRef context, const HIRect& inBoxRect,
-               PRBool inIsDisabled, PRBool inIsFrontmost, 
-               PRBool inIsHorizontal, PRBool inTabBottom,
-               PRInt32 inState, nsIFrame* aFrame);
+  void DrawTab(CGContextRef context, HIRect inBoxRect, PRInt32 inState,
+               nsIFrame* aFrame);
   void DrawTabPanel(CGContextRef context, const HIRect& inBoxRect, nsIFrame* aFrame);
   void DrawScale(CGContextRef context, const HIRect& inBoxRect,
                  PRBool inIsDisabled, PRInt32 inState,
                  PRBool inDirection, PRBool inIsReverse,
                  PRInt32 inCurrentValue,
                  PRInt32 inMinValue, PRInt32 inMaxValue,
                  nsIFrame* aFrame);
   void DrawCheckboxOrRadio(CGContextRef cgContext, PRBool inCheckbox,
--- a/widget/src/cocoa/nsNativeThemeCocoa.mm
+++ b/widget/src/cocoa/nsNativeThemeCocoa.mm
@@ -152,17 +152,21 @@ static BOOL FrameIsInActiveWindow(nsIFra
   NSWindow* win = NativeWindowForFrame(aFrame, NULL, &topLevelWidget);
   if (!topLevelWidget || !win)
     return YES;
 
   // XUL popups, e.g. the toolbar customization popup, can't become key windows,
   // but controls in these windows should still get the active look.
   nsWindowType windowType;
   topLevelWidget->GetWindowType(windowType);
-  return [win isKeyWindow] || (windowType == eWindowType_popup);
+  if (windowType == eWindowType_popup)
+    return YES;
+  if ([win isSheet])
+    return [win isKeyWindow];
+  return [win isMainWindow] && ![win attachedSheet];
 }
 
 NS_IMPL_ISUPPORTS1(nsNativeThemeCocoa, nsITheme)
 
 
 nsNativeThemeCocoa::nsNativeThemeCocoa()
 {
   NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
@@ -714,16 +718,28 @@ nsNativeThemeCocoa::DrawButton(CGContext
           needsScaling = PR_TRUE;
         }
       }
     }
     else {
       // leave things alone on Tiger
       drawFrame.size.height -= 1;
     }
+  } else if (inKind == kThemeListHeaderButton) {
+    CGContextClipToRect(cgContext, inBoxRect);
+    // Always remove the top border.
+    drawFrame.origin.y -= 1;
+    drawFrame.size.height += 1;
+    // Remove the left border in LTR mode and the right border in RTL mode.
+    drawFrame.size.width += 1;
+    PRBool isLast = IsLastTreeHeaderCell(aFrame);
+    if (isLast)
+      drawFrame.size.width += 1; // Also remove the other border.
+    if (!IsFrameRTL(aFrame) || isLast)
+      drawFrame.origin.x -= 1;
   }
 
   if (!needsScaling) {
     HIThemeDrawButton(&drawFrame, &bdi, cgContext, kHIThemeOrientationNormal, NULL);
   } else {
     int w = drawWidth + MAX_FOCUS_RING_WIDTH*2;
     int h = drawHeight + MAX_FOCUS_RING_WIDTH*2;
 
@@ -883,20 +899,21 @@ nsNativeThemeCocoa::DrawProgress(CGConte
 void
 nsNativeThemeCocoa::DrawTabPanel(CGContextRef cgContext, const HIRect& inBoxRect,
                                  nsIFrame* aFrame)
 {
   NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
 
   HIThemeTabPaneDrawInfo tpdi;
 
-  tpdi.version = 0;
+  tpdi.version = 1;
   tpdi.state = FrameIsInActiveWindow(aFrame) ? kThemeStateActive : kThemeStateInactive;
   tpdi.direction = kThemeTabNorth;
   tpdi.size = kHIThemeTabSizeNormal;
+  tpdi.kind = kHIThemeTabKindNormal;
 
   HIThemeDrawTabPane(&inBoxRect, &tpdi, cgContext, HITHEME_ORIENTATION);
 
   NS_OBJC_END_TRY_ABORT_BLOCK;
 }
 
 
 void
@@ -931,46 +948,95 @@ nsNativeThemeCocoa::DrawScale(CGContextR
   tdi.trackInfo.slider.pressState = 0;
 
   HIThemeDrawTrack(&tdi, NULL, cgContext, HITHEME_ORIENTATION);
 
   NS_OBJC_END_TRY_ABORT_BLOCK;
 }
 
 
+#define NATURAL_MINI_TAB_BUTTON_HEIGHT    17
+#define NATURAL_SMALL_TAB_BUTTON_HEIGHT   20
+#define NATURAL_REGULAR_TAB_BUTTON_HEIGHT 23
+
+
 void
-nsNativeThemeCocoa::DrawTab(CGContextRef cgContext, const HIRect& inBoxRect,
-                            PRBool inIsDisabled, PRBool inIsFrontmost,
-                            PRBool inIsHorizontal, PRBool inTabBottom,
+nsNativeThemeCocoa::DrawTab(CGContextRef cgContext, HIRect inBoxRect,
                             PRInt32 inState, nsIFrame* aFrame)
 {
   NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
 
   HIThemeTabDrawInfo tdi;
-
-  tdi.version = 0;
+  tdi.version = 1;
 
-  if (inIsFrontmost) {
-    if (inIsDisabled) 
+  PRBool isSelected = IsSelectedTab(aFrame);
+  PRBool isDisabled = IsDisabled(aFrame);
+  if (isSelected) {
+    if (isDisabled) 
       tdi.style = kThemeTabFrontUnavailable;
     else
       tdi.style = FrameIsInActiveWindow(aFrame) ? kThemeTabFront : kThemeTabFrontInactive;
   } else {
-    if (inIsDisabled)
+    if (isDisabled)
       tdi.style = kThemeTabNonFrontUnavailable;
     else if ((inState & NS_EVENT_STATE_ACTIVE) && (inState & NS_EVENT_STATE_HOVER))
       tdi.style = kThemeTabNonFrontPressed;
     else
       tdi.style = FrameIsInActiveWindow(aFrame) ? kThemeTabNonFront : kThemeTabNonFrontInactive;
   }
 
-  // don't yet support vertical tabs
-  tdi.direction = inTabBottom ? kThemeTabSouth : kThemeTabNorth;
+  tdi.direction = kThemeTabNorth;
   tdi.size = kHIThemeTabSizeNormal;
-  tdi.adornment = kThemeAdornmentNone;
+  if (inBoxRect.size.height < NATURAL_REGULAR_TAB_BUTTON_HEIGHT)
+    tdi.size = kHIThemeTabSizeSmall;
+  if (inBoxRect.size.height < NATURAL_SMALL_TAB_BUTTON_HEIGHT)
+    tdi.size = kHIThemeTabSizeMini;
+
+  PRBool isRTL = IsFrameRTL(aFrame);
+  PRBool isFirst = isRTL ? IsLastTab(aFrame) : IsFirstTab(aFrame);
+  PRBool isLast = isRTL ? IsFirstTab(aFrame) : IsLastTab(aFrame);
+
+  if (isFirst && isLast)
+    tdi.position = kHIThemeTabPositionOnly;
+  else if (isFirst)
+    tdi.position = kHIThemeTabPositionFirst;
+  else if (isLast)
+    tdi.position = kHIThemeTabPositionLast;
+  else
+    tdi.position = kHIThemeTabPositionMiddle;
+
+  // Tab separator management:
+  // Normal tabs only draw their left separator, in the leftmost pixel row of
+  // their frame. Selected tabs additionally draw their right separator, outside
+  // of their frame. To prevent overlapping, the tab to the right of the
+  // selected tab shouldn't draw its left separator.
+  tdi.adornment = kHIThemeTabAdornmentNone;
+  if (isRTL ? IsBeforeSelectedTab(aFrame) : IsAfterSelectedTab(aFrame)) {
+    if (nsToolkit::OnLeopardOrLater()) {
+      // On Leopard, the tab's left edge must be shifted 1px to the right.
+      // On Tiger, this happens automatically when no leading separator is drawn.
+      inBoxRect.origin.x += 1;
+      inBoxRect.size.width -= 1;
+    }
+  }
+  else {
+    tdi.adornment = kHIThemeTabAdornmentLeadingSeparator;
+  }
+
+  if (isSelected && !isLast) {
+    tdi.adornment |= kHIThemeTabAdornmentTrailingSeparator;
+    if (nsToolkit::OnLeopardOrLater()) {
+      // On Tiger, the right separator is drawn outside of the frame.
+      // On Leopard, the right edge must be shifted 1px to the right.
+      inBoxRect.size.width += 1;
+    }
+  }
+  
+  if (inState & NS_EVENT_STATE_FOCUS)
+    tdi.adornment |= kThemeAdornmentFocus;
 
   HIThemeDrawTab(&inBoxRect, &tdi, cgContext, HITHEME_ORIENTATION, NULL);
 
   NS_OBJC_END_TRY_ABORT_BLOCK;
 }
 
 
 static inline UInt8
@@ -1456,17 +1522,17 @@ nsNativeThemeCocoa::DrawWidgetBackground
       DrawButton(cgContext, kThemeDisclosureButton, macRect, PR_FALSE, IsDisabled(aFrame), 
                  kThemeDisclosureDown, kThemeAdornmentNone, eventState, aFrame);
       break;
 
     case NS_THEME_TREEVIEW_HEADER_CELL: {
       TreeSortDirection sortDirection = GetTreeSortDirection(aFrame);
       DrawButton(cgContext, kThemeListHeaderButton, macRect, PR_FALSE, IsDisabled(aFrame), 
                  sortDirection == eTreeSortDirection_Natural ? kThemeButtonOff : kThemeButtonOn,
-                 sortDirection == eTreeSortDirection_Descending ?
+                 sortDirection == eTreeSortDirection_Ascending ?
                  kThemeAdornmentHeaderButtonSortUp : kThemeAdornmentNone, eventState, aFrame);      
     }
       break;
 
     case NS_THEME_TREEVIEW_TREEITEM:
     case NS_THEME_TREEVIEW:
       // HIThemeSetFill is not available on 10.3
       // HIThemeSetFill(kThemeBrushWhite, NULL, cgContext, HITHEME_ORIENTATION);
@@ -1575,22 +1641,18 @@ nsNativeThemeCocoa::DrawWidgetBackground
     case NS_THEME_LISTBOX:
       // HIThemeSetFill is not available on 10.3
       CGContextSetRGBFillColor(cgContext, 1.0, 1.0, 1.0, 1.0);
       CGContextFillRect(cgContext, macRect);
       DrawFrame(cgContext, kHIThemeFrameListBox, macRect,
                 (IsDisabled(aFrame) || IsReadOnly(aFrame)), eventState);
       break;
     
-    case NS_THEME_TAB: {
-      DrawTab(cgContext, macRect,
-              IsDisabled(aFrame), IsSelectedTab(aFrame),
-              PR_TRUE, IsBottomTab(aFrame),
-              eventState, aFrame);
-    }
+    case NS_THEME_TAB:
+      DrawTab(cgContext, macRect, eventState, aFrame);
       break;
 
     case NS_THEME_TAB_PANELS:
       DrawTabPanel(cgContext, macRect, aFrame);
       break;
   }
 
   nativeDrawing.EndNativeDrawing();
@@ -1722,16 +1784,17 @@ nsNativeThemeCocoa::GetWidgetOverflow(ns
     case NS_THEME_BUTTON:
     case NS_THEME_TEXTFIELD:
     case NS_THEME_TEXTFIELD_MULTILINE:
     case NS_THEME_LISTBOX:
     case NS_THEME_DROPDOWN:
     case NS_THEME_DROPDOWN_BUTTON:
     case NS_THEME_CHECKBOX:
     case NS_THEME_RADIO:
+    case NS_THEME_TAB:
     {
       // We assume that the above widgets can draw a focus ring that will be less than
       // or equal to 4 pixels thick.
       nsIntMargin extraSize = nsIntMargin(MAX_FOCUS_RING_WIDTH, MAX_FOCUS_RING_WIDTH, MAX_FOCUS_RING_WIDTH, MAX_FOCUS_RING_WIDTH);
       PRInt32 p2a = aContext->AppUnitsPerDevPixel();
       nsMargin m(NSIntPixelsToAppUnits(extraSize.left, p2a),
                  NSIntPixelsToAppUnits(extraSize.top, p2a),
                  NSIntPixelsToAppUnits(extraSize.right, p2a),
@@ -1812,17 +1875,23 @@ nsNativeThemeCocoa::GetMinimumWidgetSize
       break;
     }
     
     case NS_THEME_TREEVIEW_HEADER:
     case NS_THEME_TREEVIEW_HEADER_CELL:
     {
       SInt32 headerHeight = 0;
       ::GetThemeMetric(kThemeMetricListHeaderHeight, &headerHeight);
-      aResult->SizeTo(0, headerHeight);
+      aResult->SizeTo(0, headerHeight - 1); // We don't need the top border.
+      break;
+    }
+
+    case NS_THEME_TAB:
+    {
+      aResult->SizeTo(0, NATURAL_MINI_TAB_BUTTON_HEIGHT);
       break;
     }
 
     case NS_THEME_SCALE_HORIZONTAL:
     {
       SInt32 scaleHeight = 0;
       ::GetThemeMetric(kThemeMetricHSliderHeight, &scaleHeight);
       aResult->SizeTo(scaleHeight, scaleHeight);
@@ -2055,18 +2124,16 @@ nsNativeThemeCocoa::ThemeSupportsWidget(
     case NS_THEME_PROGRESSBAR:
     case NS_THEME_PROGRESSBAR_VERTICAL:
     case NS_THEME_PROGRESSBAR_CHUNK:
     case NS_THEME_PROGRESSBAR_CHUNK_VERTICAL:
     case NS_THEME_TOOLBAR_SEPARATOR:
     
     case NS_THEME_TAB_PANELS:
     case NS_THEME_TAB:
-    case NS_THEME_TAB_LEFT_EDGE:
-    case NS_THEME_TAB_RIGHT_EDGE:
     
     case NS_THEME_TREEVIEW_TWISTY:
     case NS_THEME_TREEVIEW_TWISTY_OPEN:
     case NS_THEME_TREEVIEW:
     case NS_THEME_TREEVIEW_HEADER:
     case NS_THEME_TREEVIEW_HEADER_CELL:
     case NS_THEME_TREEVIEW_HEADER_SORTARROW:
     case NS_THEME_TREEVIEW_TREEITEM:
--- a/widget/src/windows/nsNativeThemeWin.cpp
+++ b/widget/src/windows/nsNativeThemeWin.cpp
@@ -163,21 +163,16 @@ static SIZE GetGutterSize(HANDLE theme, 
     int width = PR_MAX(itemSize.cx, checkboxSize.cx + gutterSize.cx);
     int height = PR_MAX(itemSize.cy, checkboxSize.cy);
     SIZE ret;
     ret.cx = width;
     ret.cy = height;
     return ret;
 }
 
-static inline PRBool IsFrameRTL(nsIFrame *frame)
-{
-  return frame->GetStyleVisibility()->mDirection == NS_STYLE_DIRECTION_RTL;
-}
-
 static HRESULT DrawThemeBGRTLAware(HANDLE theme, HDC hdc, int part, int state,
                                    const RECT *widgetRect, const RECT *clipRect,
                                    PRBool isRTL)
 {
   /* Some widgets are not direction-neutral and need to be drawn reversed for
    * RTL.  Windows provides a way to do this with SetLayout, but this reverses
    * the entire drawing area of a given device context, which means that its
    * use will also affect the positioning of the widget.  There are two ways
--- a/widget/src/xpwidgets/nsNativeTheme.cpp
+++ b/widget/src/xpwidgets/nsNativeTheme.cpp
@@ -164,16 +164,22 @@ nsNativeTheme::IsWidgetStyled(nsPresCont
           aWidgetType == NS_THEME_LISTBOX ||
           aWidgetType == NS_THEME_DROPDOWN) &&
          aFrame->GetContent()->IsNodeOfType(nsINode::eHTML) &&
          aPresContext->HasAuthorSpecifiedRules(aFrame,
                                                NS_AUTHOR_SPECIFIED_BORDER |
                                                NS_AUTHOR_SPECIFIED_BACKGROUND);
 }
 
+PRBool
+nsNativeTheme::IsFrameRTL(nsIFrame* aFrame)
+{
+  return aFrame && aFrame->GetStyleVisibility()->mDirection == NS_STYLE_DIRECTION_RTL;
+}
+
 // scrollbar button:
 PRInt32
 nsNativeTheme::GetScrollbarButtonType(nsIFrame* aFrame)
 {
   if (!aFrame)
     return 0;
 
   static nsIContent::AttrValuesArray strings[] =
@@ -207,16 +213,44 @@ nsNativeTheme::GetTreeSortDirection(nsIF
                                                 strings, eCaseMatters)) {
     case 0: return eTreeSortDirection_Descending;
     case 1: return eTreeSortDirection_Ascending;
   }
 
   return eTreeSortDirection_Natural;
 }
 
+PRBool
+nsNativeTheme::IsLastTreeHeaderCell(nsIFrame* aFrame)
+{
+  if (!aFrame)
+    return PR_FALSE;
+
+  // A tree column picker is always the last header cell.
+  if (aFrame->GetContent()->Tag() == nsWidgetAtoms::treecolpicker)
+    return PR_TRUE;
+
+  // Find the parent tree.
+  nsIContent* parent = aFrame->GetContent()->GetParent();
+  while (parent && parent->Tag() != nsWidgetAtoms::tree) {
+    parent = parent->GetParent();
+  }
+
+  // If the column picker is visible, this can't be the last column.
+  if (parent && !parent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidecolumnpicker,
+                                     NS_LITERAL_STRING("true"), eCaseMatters))
+    return PR_FALSE;
+
+  while ((aFrame = aFrame->GetNextSibling())) {
+    if (aFrame->GetRect().width > 0)
+      return PR_FALSE;
+  }
+  return PR_TRUE;
+}
+
 // tab:
 PRBool
 nsNativeTheme::IsBottomTab(nsIFrame* aFrame)
 {
   if (!aFrame)
     return PR_FALSE;
 
   nsAutoString classStr;
@@ -248,16 +282,44 @@ nsNativeTheme::IsHorizontal(nsIFrame* aF
   if (!aFrame)
     return PR_FALSE;
     
   return !aFrame->GetContent()->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::orient,
                                             nsWidgetAtoms::vertical, 
                                             eCaseMatters);
 }
 
+PRBool
+nsNativeTheme::IsNextToSelectedTab(nsIFrame* aFrame, PRInt32 aOffset)
+{
+  if (!aFrame)
+    return PR_FALSE;
+
+  if (aOffset == 0)
+    return IsSelectedTab(aFrame);
+
+  PRInt32 thisTabIndex = -1, selectedTabIndex = -1;
+
+  nsIFrame* currentTab = aFrame->GetParent()->GetFirstChild(NULL);
+  for (PRInt32 i = 0; currentTab; currentTab = currentTab->GetNextSibling()) {
+    if (currentTab->GetRect().width == 0)
+      continue;
+    if (aFrame == currentTab)
+      thisTabIndex = i;
+    if (IsSelectedTab(currentTab))
+      selectedTabIndex = i;
+    ++i;
+  }
+
+  if (thisTabIndex == -1 || selectedTabIndex == -1)
+    return PR_FALSE;
+
+  return (thisTabIndex - selectedTabIndex == aOffset);
+}
+
 // progressbar:
 PRBool
 nsNativeTheme::IsIndeterminateProgress(nsIFrame* aFrame)
 {
   if (!aFrame)
     return PR_FALSE;
 
   return aFrame->GetContent()->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::mode,
--- a/widget/src/xpwidgets/nsNativeTheme.h
+++ b/widget/src/xpwidgets/nsNativeTheme.h
@@ -80,16 +80,19 @@ class nsNativeTheme
 
   // Accessors to widget-specific state information
 
   // all widgets:
   PRBool IsDisabled(nsIFrame* aFrame) {
     return CheckBooleanAttr(aFrame, nsWidgetAtoms::disabled);
   }
 
+  // RTL chrome direction
+  PRBool IsFrameRTL(nsIFrame* aFrame);
+
   // button:
   PRBool IsDefaultButton(nsIFrame* aFrame) {
     return CheckBooleanAttr(aFrame, nsWidgetAtoms::_default);
   }
 
   // checkbox:
   PRBool IsChecked(nsIFrame* aFrame) {
     return GetCheckedOrSelected(aFrame, PR_FALSE);
@@ -106,24 +109,35 @@ class nsNativeTheme
   
   // scrollbar button:
   PRInt32 GetScrollbarButtonType(nsIFrame* aFrame);
 
   // tab:
   PRBool IsSelectedTab(nsIFrame* aFrame) {
     return CheckBooleanAttr(aFrame, nsWidgetAtoms::selected);
   }
+  
+  PRBool IsNextToSelectedTab(nsIFrame* aFrame, PRInt32 aOffset);
+  
+  PRBool IsBeforeSelectedTab(nsIFrame* aFrame) {
+    return IsNextToSelectedTab(aFrame, -1);
+  }
+  
+  PRBool IsAfterSelectedTab(nsIFrame* aFrame) {
+    return IsNextToSelectedTab(aFrame, 1);
+  }
 
   // toolbarbutton:
   PRBool IsCheckedButton(nsIFrame* aFrame) {
     return CheckBooleanAttr(aFrame, nsWidgetAtoms::checked);
   }
 
   // treeheadercell:
   TreeSortDirection GetTreeSortDirection(nsIFrame* aFrame);
+  PRBool IsLastTreeHeaderCell(nsIFrame* aFrame);
 
   // tab:
   PRBool IsBottomTab(nsIFrame* aFrame);
   PRBool IsFirstTab(nsIFrame* aFrame);
   PRBool IsLastTab(nsIFrame* aFrame);
   
   PRBool IsHorizontal(nsIFrame* aFrame);
 
--- a/widget/src/xpwidgets/nsWidgetAtomList.h
+++ b/widget/src/xpwidgets/nsWidgetAtomList.h
@@ -72,16 +72,17 @@ WIDGET_ATOM(descending, "descending")
 WIDGET_ATOM(dir, "dir")
 WIDGET_ATOM(disabled, "disabled")
 WIDGET_ATOM(_false, "false")
 WIDGET_ATOM(firsttab, "first-tab")
 WIDGET_ATOM(focused, "focused")
 WIDGET_ATOM(Forward, "Forward")
 WIDGET_ATOM(Home, "Home")
 WIDGET_ATOM(hidden, "hidden")
+WIDGET_ATOM(hidecolumnpicker, "hidecolumnpicker")
 WIDGET_ATOM(horizontal, "horizontal")
 WIDGET_ATOM(vertical, "vertical")
 WIDGET_ATOM(id, "id")
 WIDGET_ATOM(image, "image")
 WIDGET_ATOM(input, "input")
 WIDGET_ATOM(key, "key") // The key element / attribute
 WIDGET_ATOM(label, "label")
 WIDGET_ATOM(lasttab, "last-tab")
@@ -113,11 +114,13 @@ WIDGET_ATOM(scrollbarUpBottom, "scrollba
 WIDGET_ATOM(scrollbarUpTop, "scrollbar-up-top")
 WIDGET_ATOM(Search, "Search")
 WIDGET_ATOM(selected, "selected")
 WIDGET_ATOM(sortdirection, "sortDirection")
 WIDGET_ATOM(state, "state")
 WIDGET_ATOM(step, "step")
 WIDGET_ATOM(Stop, "Stop")
 WIDGET_ATOM(_true, "true")
+WIDGET_ATOM(tree, "tree")
+WIDGET_ATOM(treecolpicker, "treecolpicker")
 WIDGET_ATOM(type, "type")
 WIDGET_ATOM(value, "value")