From 622263bce62e63be5395fffe2b69fbc46131f917 Mon Sep 17 00:00:00 2001 From: "brade%netscape.com" Date: Thu, 8 Aug 2002 16:09:27 +0000 Subject: [PATCH] sync with 1.0 branch up to MOZILLA_1_0_20020805 git-svn-id: svn://10.0.0.236/branches/CHIMERA_M1_0_BRANCH@126766 18797224-902f-48f8-a5cc-f745e15eee43 --- .../classic/communicator/sidebar/sidebar.css | 1 + mozilla/themes/classic/editor/editor.css | 2 +- mozilla/themes/classic/global/mac/browser.css | 5 + .../classic/global/mac/globalBindings.xml | 9 +- mozilla/themes/classic/global/mac/menu.css | 2 +- mozilla/themes/classic/global/mac/toolbar.css | 7 +- mozilla/themes/classic/global/win/browser.css | 4 + mozilla/themes/classic/global/win/menu.css | 4 +- mozilla/themes/classic/global/win/toolbar.css | 7 +- mozilla/themes/classic/jar.mn | 2 + .../classic/messenger/messageHeader.css | 5 + .../messenger/smime/msgReadSMIMEOverlay.css | 7 - .../modern/communicator/sidebar/sbar-top.gif | Bin 0 -> 1452 bytes .../communicator/sidebar/sbtab-lft-act.gif | Bin 194 -> 199 bytes .../communicator/sidebar/sbtab-lft-sel.gif | Bin 197 -> 196 bytes .../modern/communicator/sidebar/sbtab-lft.gif | Bin 196 -> 195 bytes .../communicator/sidebar/sbtab-mid-act.gif | Bin 93 -> 93 bytes .../communicator/sidebar/sbtab-mid-sel.gif | Bin 93 -> 93 bytes .../modern/communicator/sidebar/sbtab-mid.gif | Bin 93 -> 93 bytes .../sidebar/sbtab-rit-btm-act.gif | Bin 185 -> 144 bytes .../sidebar/sbtab-rit-btm-hov.gif | Bin 83 -> 132 bytes .../sidebar/sbtab-rit-top-act.gif | Bin 1252 -> 1260 bytes .../sidebar/sbtab-rit-top-hov.gif | Bin 1201 -> 1202 bytes .../sidebar/sbtab-rit-top-sel.gif | Bin 1212 -> 1220 bytes .../communicator/sidebar/sbtab-rit-top.gif | Bin 1088 -> 1104 bytes .../modern/communicator/sidebar/sidebar.css | 75 ++-- .../communicator/sidebar/sidebarBindings.xml | 20 +- .../communicator/taskbar/addressbook-16.gif | Bin 979 -> 992 bytes .../communicator/taskbar/addressbook-act.gif | Bin 603 -> 581 bytes .../communicator/taskbar/addressbook.gif | Bin 603 -> 581 bytes .../communicator/taskbar/composer-16.gif | Bin 998 -> 596 bytes .../communicator/taskbar/composer-act.gif | Bin 1026 -> 1033 bytes .../modern/communicator/taskbar/composer.gif | Bin 1026 -> 1041 bytes mozilla/themes/modern/editor/editor.css | 1 + mozilla/themes/modern/editor/icons/btn1.gif | Bin 38166 -> 39568 bytes mozilla/themes/modern/global/browser.css | 20 +- mozilla/themes/modern/global/menu.css | 2 +- mozilla/themes/modern/global/toolbar.css | 12 +- .../themes/modern/global/toolbarbutton.css | 26 +- mozilla/themes/modern/jar.mn | 5 + .../themes/modern/messenger/messageHeader.css | 1 + .../messenger/smime/msgReadSMIMEOverlay.css | 9 +- mozilla/themes/modern/navigator/navigator.css | 13 + mozilla/widget/src/gtk/nsGtkEventHandler.cpp | 6 + mozilla/widget/src/gtk/nsWindow.cpp | 9 + mozilla/widget/src/gtkxtbin/gtkxtbin.c | 11 +- mozilla/widget/src/os2/nsAppShell.cpp | 9 +- mozilla/widget/src/os2/nsDragService.cpp | 2 +- mozilla/widget/src/os2/nsFrameWindow.cpp | 21 +- mozilla/widget/src/os2/nsFrameWindow.h | 1 - mozilla/widget/src/os2/nsModule.cpp | 9 + mozilla/widget/src/os2/nsModule.h | 1 + mozilla/widget/src/os2/nsWindow.cpp | 189 +++++++--- mozilla/widget/src/os2/nsWindow.h | 11 +- mozilla/widget/src/windows/nsClipboard.cpp | 2 +- mozilla/widget/src/windows/nsDataObj.cpp | 11 + .../src/windows/nsDataObjCollection.cpp | 9 +- .../widget/src/windows/nsDataObjCollection.h | 15 +- mozilla/widget/src/windows/nsDragService.cpp | 23 +- mozilla/widget/src/windows/nsDragService.h | 2 + mozilla/widget/src/windows/nsToolkit.cpp | 17 + mozilla/widget/src/windows/nsToolkit.h | 1 + mozilla/widget/src/windows/nsWindow.cpp | 341 ++++++++++++++++-- mozilla/widget/src/windows/nsWindow.h | 85 ++++- mozilla/widget/src/xlib/Makefile.in | 2 +- .../xpfe/browser/resources/content/browser.js | 35 +- .../resources/content/contents-region.rdf | 2 +- .../browser/resources/content/contents.rdf | 2 +- .../content/mac/contents-platform.rdf | 2 +- .../browser/resources/content/navigator.js | 113 ++++-- .../browser/resources/content/navigator.xul | 17 +- .../resources/content/navigatorOverlay.xul | 11 +- .../content/nsBrowserStatusHandler.js | 2 +- .../browser/resources/content/pageInfo.js | 93 +++-- .../browser/resources/content/pageInfo.xul | 7 +- .../content/unix/contents-platform.rdf | 2 +- .../resources/content/urlbarBindings.xml | 10 +- .../content/win/contents-platform.rdf | 2 +- .../locale/en-US/contents-region.rdf | 2 +- .../resources/locale/en-US/contents.rdf | 2 +- .../locale/en-US/mac/contents-platform.rdf | 2 +- .../resources/locale/en-US/navigator.dtd | 8 +- .../locale/en-US/navigator.properties | 2 +- .../resources/locale/en-US/pageInfo.dtd | 1 + .../resources/locale/en-US/turboDialog.dtd | 2 +- .../locale/en-US/unix/contents-platform.rdf | 2 +- .../locale/en-US/win/contents-platform.rdf | 2 +- 87 files changed, 1024 insertions(+), 313 deletions(-) create mode 100644 mozilla/themes/modern/communicator/sidebar/sbar-top.gif diff --git a/mozilla/themes/classic/communicator/sidebar/sidebar.css b/mozilla/themes/classic/communicator/sidebar/sidebar.css index 64f8ef86dcd..82886385895 100644 --- a/mozilla/themes/classic/communicator/sidebar/sidebar.css +++ b/mozilla/themes/classic/communicator/sidebar/sidebar.css @@ -45,6 +45,7 @@ #sidebar-panel-picker { color: inherit; + -moz-user-focus:normal !important; } #sidebar-panel-picker > .toolbarbutton-dropmarker { diff --git a/mozilla/themes/classic/editor/editor.css b/mozilla/themes/classic/editor/editor.css index 928e901cb79..fc7faf9af4a 100644 --- a/mozilla/themes/classic/editor/editor.css +++ b/mozilla/themes/classic/editor/editor.css @@ -49,6 +49,7 @@ #content-source, #doctype-text { font-family: -moz-fixed; + font-size: -moz-initial; } #appcontent { @@ -62,4 +63,3 @@ border-right: 1px solid ThreeDLightShadow; } - diff --git a/mozilla/themes/classic/global/mac/browser.css b/mozilla/themes/classic/global/mac/browser.css index 00b4be1cea5..a98d06343d9 100644 --- a/mozilla/themes/classic/global/mac/browser.css +++ b/mozilla/themes/classic/global/mac/browser.css @@ -38,3 +38,8 @@ tab[busy] > .tab-icon { .tabs-closebutton > .toolbarbutton-icon { margin: 0; } + +.tabs-newbutton { + margin: 0px; + list-style-image: url("chrome://global/skin/icons/tab-new.gif"); +} diff --git a/mozilla/themes/classic/global/mac/globalBindings.xml b/mozilla/themes/classic/global/mac/globalBindings.xml index 3742fef3d16..60d6f2707b7 100644 --- a/mozilla/themes/classic/global/mac/globalBindings.xml +++ b/mozilla/themes/classic/global/mac/globalBindings.xml @@ -31,16 +31,19 @@ - - + + + + - + diff --git a/mozilla/themes/classic/global/mac/menu.css b/mozilla/themes/classic/global/mac/menu.css index ec3faf3f0d5..87495c758ee 100644 --- a/mozilla/themes/classic/global/mac/menu.css +++ b/mozilla/themes/classic/global/mac/menu.css @@ -185,7 +185,7 @@ menuitem[checked="true"][type="radio"][disabled="true"] { menulist > menupopup > menuitem, .menulist-menupopup > menuitem { max-width: none; - padding: 0; + padding: 0px 20px 0px 0px; font: message-box; } diff --git a/mozilla/themes/classic/global/mac/toolbar.css b/mozilla/themes/classic/global/mac/toolbar.css index bf609895569..5af9dd3efaa 100644 --- a/mozilla/themes/classic/global/mac/toolbar.css +++ b/mozilla/themes/classic/global/mac/toolbar.css @@ -47,8 +47,13 @@ menubar { Prevents hiding of scrollbars in browser when window is made smaller.*/ } -.toolbar-holder { +.toolbar-prefix { border-left: 1px solid ThreeDHighlight; + border-top: 1px solid ThreeDHighlight; + border-bottom: 1px solid ThreeDShadow; +} + +.toolbar-holder { border-top: 1px solid ThreeDHighlight; border-right: 1px solid ThreeDShadow; border-bottom: 1px solid ThreeDShadow; diff --git a/mozilla/themes/classic/global/win/browser.css b/mozilla/themes/classic/global/win/browser.css index 9bf479bf961..62a93c174ef 100644 --- a/mozilla/themes/classic/global/win/browser.css +++ b/mozilla/themes/classic/global/win/browser.css @@ -43,3 +43,7 @@ tab[busy] > .tab-icon { margin: 0; } +.tabs-newbutton { + margin: 0px; + list-style-image: url("chrome://global/skin/icons/tab-new.gif"); +} diff --git a/mozilla/themes/classic/global/win/menu.css b/mozilla/themes/classic/global/win/menu.css index d5c87df7827..695a9b620ec 100644 --- a/mozilla/themes/classic/global/win/menu.css +++ b/mozilla/themes/classic/global/win/menu.css @@ -150,10 +150,10 @@ menulist > menupopup > menuitem, .menulist-menupopup > menu, menulist > menupopup > menu { border: 1px solid transparent; - padding: 1px 16px 1px 5px; + padding: 1px 30px 1px 5px; max-width: none; font: message-box; - color: -moz-FieldText + color: -moz-FieldText; } .menulist-menupopup > menuitem > .menu-iconic-left, diff --git a/mozilla/themes/classic/global/win/toolbar.css b/mozilla/themes/classic/global/win/toolbar.css index 5ade9b0241d..1a6dc86f6e7 100644 --- a/mozilla/themes/classic/global/win/toolbar.css +++ b/mozilla/themes/classic/global/win/toolbar.css @@ -45,8 +45,13 @@ menubar { Prevents hiding of scrollbars in browser when window is made smaller.*/ } -.toolbar-holder { +.toolbar-prefix { border-left: 1px solid ThreeDHighlight; + border-top: 1px solid ThreeDHighlight; + border-bottom: 1px solid ThreeDShadow; +} + +.toolbar-holder { border-top: 1px solid ThreeDHighlight; border-right: 1px solid ThreeDShadow; border-bottom: 1px solid ThreeDShadow; diff --git a/mozilla/themes/classic/jar.mn b/mozilla/themes/classic/jar.mn index fb6fa7af95c..7fdc4b5c294 100644 --- a/mozilla/themes/classic/jar.mn +++ b/mozilla/themes/classic/jar.mn @@ -141,6 +141,7 @@ classic.jar: skin/classic/global/console/console-error-dash.gif (global/console/console-error-dash.gif) skin/classic/global/console/console-error-caret.gif (global/console/console-error-caret.gif) skin/classic/global/icons/close-button.gif (global/icons/close-button.gif) + skin/classic/global/icons/tab-new.gif (global/icons/tab-new.gif) skin/classic/global/toolbar/tbgrip-arrow.gif (global/toolbar/tbgrip-arrow.gif) skin/classic/global/toolbar/tbgrip-arrow-clps.gif (global/toolbar/tbgrip-arrow-clps.gif) skin/classic/global/toolbar/tbgrip-texture.gif (global/toolbar/tbgrip-texture.gif) @@ -285,6 +286,7 @@ classic.jar: skin/classic/messenger/smime/msgCompSecurityInfo.css (messenger/smime/msgCompSecurityInfo.css) skin/classic/messenger/smime/msgReadSMIMEOverlay.css (messenger/smime/msgReadSMIMEOverlay.css) skin/classic/messenger/smime/msgCompSMIMEOverlay.css (messenger/smime/msgCompSMIMEOverlay.css) + skin/classic/messenger/smime/certFetchingStatus.css (messenger/smime/certFetchingStatus.css) skin/classic/messenger/smime/msgHdrViewSMIMEOverlay.css (messenger/smime/msgHdrViewSMIMEOverlay.css) skin/classic/messenger/smime/icons/smbtn1.gif (messenger/smime/icons/smbtn1.gif) skin/classic/messenger/smime/icons/sbSignOk.gif (messenger/smime/icons/sbSignOk.gif) diff --git a/mozilla/themes/classic/messenger/messageHeader.css b/mozilla/themes/classic/messenger/messageHeader.css index fbfe93cc74a..91b5c10271a 100644 --- a/mozilla/themes/classic/messenger/messageHeader.css +++ b/mozilla/themes/classic/messenger/messageHeader.css @@ -100,6 +100,11 @@ color: #FF0000; } +.emailDisplayImage { + padding-left: 2px; + -moz-box-pack: end; +} + /* ::::: email address twisty ::::: */ .addresstwisty { diff --git a/mozilla/themes/classic/messenger/smime/msgReadSMIMEOverlay.css b/mozilla/themes/classic/messenger/smime/msgReadSMIMEOverlay.css index 400b233e7d8..9628baa17f2 100644 --- a/mozilla/themes/classic/messenger/smime/msgReadSMIMEOverlay.css +++ b/mozilla/themes/classic/messenger/smime/msgReadSMIMEOverlay.css @@ -40,35 +40,28 @@ #status-bar #signed-status { list-style-image: none; - visibility: collapsed; } #status-bar[signed="ok"] #signed-status { list-style-image: url("chrome://messenger/skin/smime/icons/sbSignOk.gif"); - visibility: visible; } #status-bar[signed="unknown"] #signed-status { list-style-image: url("chrome://messenger/skin/smime/icons/sbSignUnknown.gif"); - visibility: visible; } #status-bar[signed="notok"] #signed-status { list-style-image: url("chrome://messenger/skin/smime/icons/sbSignNotOk.gif"); - visibility: visible; } #status-bar #encrypted-status { list-style-image: none; - visibility: collapsed; } #status-bar[encrypted="ok"] #encrypted-status { list-style-image: url("chrome://messenger/skin/smime/icons/sbCryptoOk.gif"); - visibility: visible; } #status-bar[encrypted="notok"] #encrypted-status { list-style-image: url("chrome://messenger/skin/smime/icons/sbCryptoNotOk.gif"); - visibility: visible; } diff --git a/mozilla/themes/modern/communicator/sidebar/sbar-top.gif b/mozilla/themes/modern/communicator/sidebar/sbar-top.gif new file mode 100644 index 0000000000000000000000000000000000000000..5f2b6569aeb345f542952c56a5356c923618f5ae GIT binary patch literal 1452 zcmdUs={wX30DynSIb*P)m~l69jHx8l5KXhiQY|INstF0%9!DFVqMnd*gft>Tk`k># zLNg5Jp83r%_vK7EHfdY3Q@icjZU2jXKfIsc=XnEz0`_9#t^u~d0sy>Z2>G&UGE)Rf zr$%_PQBXd}77uYGj4|afS4v@tX?z7;prEisRIYT0En$wU23g`^o{T4%q6?HPp_ zQwZcUbiSMh%K5UHQJ#z=n&keQ#8&|SD;z%S{MU>5>aR}#{f%6I{{vcuMa3nhM54C# zHZwB|go6VLFhz&ra zGng!98JEW`FTZJFSB1mLBX)101g* zibB^$dIBme4Zd-bb_3csAzQ7R@?C!0%#7~yc$=-*)GEqB1=eIpf3>@D+ZHXgA9Z!Y z>-o5wyV#?W1{&W)f3EgA-x%65?4#og^GK$eAKtJ#00Qv^xOUGD-q{cF%Ms6F*oQES zW&~#Dif7CEeAP-|KR8>1Ifgf#NBTT)(F@pi53WB+dN zOd70QEr8czCm%N>Ad4MvqSV?e+8He=Owc;YN7}k8D-)bs2$YyqGfFrv7l%qSNu~dl zEriH$!UxiHqYRFvT}Dyo0=}ci>_fEjj;=jB;zwlFIZ7I?-APf z99FkyiuXID$3n8yDM>=_*}?^j?;*B(?&!AJ+-dS%_EXH}m;^+L3q(E1P=v*Mo`}p4)hh$TOzTiCbhecJsu%5;Fs-9ztk~?P-W1(K&twG`8`WKcG zFGOtBZ*6>%!kBNmLY{BCbtb~2+|WC>D<(X`wf=R5y|+(`8*WE!Y!mvp5B#iasOHF{ z>gvn+MiW;%BJVyR>RU#&K@e{miQVdlPk@1SNJ^hpFqG7vO`fSYa3sbb1!|C%c~N+B zLLi)6FYOU{x&?J^@qy;|QuBUXsZP7Kc&^a^9pKo*xbZQ+tl~tXsyT6$l}e!yk+u&W zeL6RNxnnLFLw!bMJVWIz1Q>0kB`*Z0SL-dioGyXIV}H(O6}dhAZkra-3Z6;8xKkWM z|9s!FFV)ww@v-bArq(HpxauD~msLloGtzlZ8MHmMyKBEVr)9|G+Z)yXxJuUyg3R3S z!+q>+wp+a+l%F2I?pFP5Wt0IFu#0g z>RMvP(^HXmdy5Tfvo7}g9EPRN@HnubFj4{T(yN`QiVSw^-$;))A$uat=gUGh9JL4s ze#Rl4{WbXeU=Eso*1~FCMZ|#b-c~W9oL*rPYPuJ7a|oKLxOp3FmEXN99BOw>4%TzC damb)N5JkS!mtIr+99kMZ$GtcM=s*D9e*n#`_F9He|p`%)AQHvT(|f1hJ$C8Z9B4J=kc|>PtRMs zbLpnTi#Huuz4O$Xou@V&IK6E1;UyanuGn#G?amV$51d=Er;zj54g689b6-9k5uyz?roBs1aX+ftWz#4Dn=!$A=P@+%{J3SC((sw|W1WP5aMn zKYW1!6)65>0SoAWNRXWjto92O`W{c6<6fn5?!i7i2i6iGI diff --git a/mozilla/themes/modern/communicator/sidebar/sbtab-lft-sel.gif b/mozilla/themes/modern/communicator/sidebar/sbtab-lft-sel.gif index 89063148d27f13877c9b91fc56347e1ac542cd88..69b3d16a0065b66745ae575af9bcbbb4f42a260c 100644 GIT binary patch delta 162 zcmV;T0A2sZ0mK1PM@dFFIbjL_4gkae0L#_j*Wl~e;_TPq>($}w)ZXgP+U3#P=gimP z*5K>a-|EfSg&f4V5*WuIM>D1ln)ZgpS+vdyI;mp|L(c9+J+~|=}8^B=0028bv09`6 diff --git a/mozilla/themes/modern/communicator/sidebar/sbtab-lft.gif b/mozilla/themes/modern/communicator/sidebar/sbtab-lft.gif index 8acb34244a987dd10253a58db96637da41ffa09f..7e0cf5e847715210c520ef2e50214d0dac404cae 100644 GIT binary patch delta 170 zcmV;b09F6Q0mA`aM@dFFIbjL_4gkae0J+4_%GTk@)ZfX|-p144z|7jl(%s3`;K$P4 z$kX1v$=A8Y(!0pi!qD8j$kV{f*Tc}}M(cH<_;=0Gv$<*M%%-6li)5X!;00000 z005C*B11snAPz~Hh>L-&MymprAkQ)Y2tlp~_O(wr8vt`SREh`Tg1~GF0gr|hB6$J| YSge(z=qjuL2V)EdEFz1t+8P1?JE+T9u>b%7 delta 171 zcmV;c0960O0mK1bM@dFFIbjL_4gkae0Kv=E(Anh7*5S_B;>_6M&)4D3*yGLD;m6V5 z#n0Qr%-PD+;LFwE!pzps*yF{|*}}}&%+%h(%htoq*U;MK#?alu%-6xp*2vM^%h%z{ z)!&g`B1A!8RE$S?j1nWP>L$I&Bq literal 93 zcmZ?wbhEHbWMtrD*v!DNcIVOEM=x#IduGF~Q=1Q*-*xQLwu9$)9J#pb*oF1Gj_){p kVb#`y3`junCkvRT10q3YFtBhHXo@&lwslNo=wPr00IO~ySO5S3 diff --git a/mozilla/themes/modern/communicator/sidebar/sbtab-mid-sel.gif b/mozilla/themes/modern/communicator/sidebar/sbtab-mid-sel.gif index 8c9bce842091d367881d1554ff9e6c660bfde53c..dadcdec1c89dc67605f2412670fb08f5d3947abd 100644 GIT binary patch delta 65 zcmV-H0KWfST`osSMmRZP0RRpFvj70s;Op4p?90{Q*Wv5T*WuIM>DA%u&DiA8+vm^P X<<;NnkuD<)5GWABFa@PUgopq;k{~1? delta 65 zcmV-H0KWfST`osSMmRZP0RRpFvj70y*0gwSJM@dFFIbja~9ssid0HLwIxx~=gfPh+ z)!pZjDrW*B{MUyL;!cOFNEU+;QyE+_igl9J!?UlZ62UbU*}1 zEd#Ts$F4nMx~tTc*S>kgY5rY)MXqvK*zze+bGMu2Uz@Z!a`E8Gp-+uzPn=zAQ(nz1U5lffDQe{mYm diff --git a/mozilla/themes/modern/communicator/sidebar/sbtab-rit-top-act.gif b/mozilla/themes/modern/communicator/sidebar/sbtab-rit-top-act.gif index 10395b6099f8fb0b5770af56408c33274986ca7b..1c12ea53dc48704b26b0b84181a2c47d130eedf9 100644 GIT binary patch literal 1260 zcmWlYYfMvT0ESyG89H?YbrGG4P85}GsLach43v3^W*de@vzaJnOH7PLH?sZM5-}iF z5e27+I3{vw3+1k~r}yijmveeKJ*VyImA14fmkNuQIraO#;rrwL_2l{U=G}K-@Ae&K zS)BQte>of+pa!8-`WDiUXVlThs!+T^q*U0wB4@CN@=FMJuhoN@=uWdsqNhYghHs#S zGE0Zd#Fv`dF{2A12Y@(4Z0xD_aY7xNl>4Fz&xpk8?XvkX1Kn+Q_3A01p5kk40yXJ_ zP;90pX8LM#pV;EUhAH1@LJgoY5OW~pg^-2N1Cb&&>7R8%WCu`UafN09%I5}9521S& z1CSY;(E*5ATvCGr!zm>j=@8=-0Gil@JTk6e!(tQNAi%^H#sncovg-Jh#7JXwu!{;} zlwUnME~A5<_)`ynQYNGhk97+K< zQ!|n1bOhu~5OW5EuaPnwmpgpFUj9=ah^gK}DIF}YsuQVgy4a-5Om~ys8xID1?0$@N zcaiL)H>h1>V*vc6@`f8iD?+;Xlq){nXJK4p(*lwu0DLg0H6dh1=)Tb-wX;qD2VWyT z?(~i(hDeWubPKWJ=0S}z5SO!I8-N{3LZBe}jr7g-A-={c(ArwXxR78;00o2_8>YK; zjyr?e+XDuXBOs!J%@5TbLwbRdR6j|ynAjGA?H#7Qu>|Jui3pESNeVSqzTTk%u)O*v z-^B1SV~ZFU8)>YAK1si&4HF z!qfT^DXgB}*GLl`Z|v9Hml*m9S7VQ|xnJ2$`g-i%AOIp2p&Cn=;q3aT+Zp_8K-X&a z@MUHp;pwsm6#i&0!S-mZO(MnLeM*^y5#WrRaEoxKNb3;koa9?zgwPJa0M2w@mvL!6Sd z;`;2G=0n`!`Yq)fGOk~KZ$a+PBiC&oE?!cZ!qp9Y^U?QbKJDZt@4dUUAnE8aUe=!K z`p=J5wUp^&hB*uOTTYck3Y*p+uor*Vg!ArlIBHdTq|BOq=x+X*=#SxI0ru@nM?v1$ zl}i=dCVj4Oa$8mZX+>Hc*I0IS`iJI#drg$-7R8Y0+WM_W4 z)EPD1%9*>u`|7-I&f22)h4mX=oLRheWiF2w`KL9dcF6)Vzh1}I+|FOVs6DNkSpF#W zw~SMJIA6I^S04O%Ca2_+AFk!CEPZ%3vUKYj3m(37Z|_|0^p-0}p9o8`M;bHpH_S7? zsatjAPSV+&f+D`A`eu4}p`vRv;?F!$^_+YB`AM=ib0=1jmQ%5)NV8_y%rnEL^^IBk zzL?nMC`=BOXV}*bJ#VW_-Ek{S%zsuIPU2*e)VzY)#KP1SYs1M0b7j1&-5;kn(!AW? zuN~$s$y3Z6ueiXpUA%buJm>Q2FWJpS+g`Qo-u>CVQ=60KGz3l-&i@H7)GsK*&Y3v( zwlA#Za#QMxGmf6vWJq6hDDPs*xvvYk>->SrqK&0foA-b4$IJAz#iiQ^buAlHQaC&R E2a*3R0{{R3 literal 1252 zcmWktYiv_x04=PW4ayh{4KH!bfjDN!=3@h<7SQpCB!HNp@iE3C#0O5IW@rMP8zJB# z3JYCSU}J@C&i1xlyOl?KAH99w-rm0M?Y+Hyu&rzN5LiUW*6%~d`Eh=pbCPq;wjDK9 z8x9mn=1U$*B$zmi2}7ONU1mnWJz)wyGS2{U^qzJ64w;^?@JU-Zh6bYgU|i3L1Fo=! z3~EpcF?;=4U`>sax6?#)2n~rX=Pw$(yq@BfDn06psC0M)K%8QUM2d$Hr6VkW)}f35 zpv50WFq(xhk-E#Lr>w)75QKI%9)mCpAvQXJ5DcCLD9u^eI6jm?hsQ8F5(h8@U_5o# zLPxYWJv@M>X%Gew^KxSP9>xgfX<(TF*bK1v1+6n|9U0SG1Kg}>7T{iXkmmHE#MKAc zb5mIw03sa6!f|aliC{j&8bFzdE}SIzBo-UN{85Zc#8P*y;;=Uh46{<1Nk4$(P}&bb z_YJ$z7bO|q7K~z9fHC|a!&3lI5Gs3&crr~S(-_76-ZR+ijgli{R$s)Pp6I58J_oC& z_`j$q;uF-iU@t8?vmgkdAsp*>vkU;5hrl)iP%hz~0m^FzcNP#cKuAw<5E_H=UbEZ6 z@O}t;ZrHUG3Bdvi~HNvK6ML^Dl15 z?Cl+AuH61H_wdITdx!5dzx|W6q7Lh5-QW7c?v9S{1N5n;)xKIxyCt_gBUGygXjG;9Ri0V&xk37tId6QPe}D4a<`zbJW)g>kJ{Yxrsq~fd3 zs;G9hp4H{e-~O-by%wkR(8}uj@~JBgOXih?=IoX?Hy!-ardLmsvR?|z_KlY9=vue$ z?4s^x%#HQSbcXONY`Z2m->7|-BY~kG8p4Xl&U5(4j7Dy0#jix%I zTy?qmh<>B3?puwsw0viSNro4{+m~;t)f3Au(bU008j9wz5GP+js~A1B=Q-g@nh*)Dagl7zi39BZ^VO01-Z*CQ34+Nf8#d z3dj=?CabrOOb z=fP+yEagFx$20P9fS~yO3AV!$R%)^wxA4zFc8MUWaKHzW|Udu6lL_0VzCTS z;_YF*#UHW+7%Ljq+5I5S+E8{9=SLv?_9KHGVXaeitf)}goYl{e8QJJ1A6cecI3Ly~ za?fB)$Q5IG1xw3+Pa^JwY;@yhU&!nWCW~b&&YGq}CSNF4D4V@Odr0K61(=QN-B`M$ zi20H|5Khm`WoMsTr^AUtIV9x)J|X7H>GF&}Aw3SqtpsQEQgkNw$n4{DMIL{Bgo8*)PF(nP)MP_BM}QIK5{xn+#fvj@ zMqki|asHH~_u#3b;*4iqvFyKG!r;Lj7zc)DC3T0O}^l` zFJyERE{rox2k+}_W`796_+c((LK%xEm@X?8gm&WsL<-@!Jgj$G{4|}-hqHN$kb*JZ zMeu+Jzwzh9FaUG8BK$rnOtA51Y=VwTzI5Ki#hpQMaKzxGB1|G@@K6(8${e7B8Tqko zO6PyEJ8cax7Bp;+rd@H#9e)8pkYd(}vLMC`AoE)Xg!wfCiz}9E>#N(_F0{XKYM17W zr+IkQ`QEx$-s?Gi^@#54Z@Pa{A)6Yv?Hc%`F5K|tr6pCB>dNZCy|(tjBIMk`v#Sb+0?fm7xLseD%o&QvSc(kj3_seH5uV`KQdYkINVBOZ6 z8=FQiJvb75_4*InlOHc!czBCeIeh=tD5b7%`mKA&H@Urw`|Id==xqC)+O1pmtz3TG z_H0eORa0nuvaGUtz3Q`3IJ$Rj{i-YH_Ti@%Y^puhqe32>2*p(O7w>MoS#xXg>edg~ z@#9@k-?q)E}o`Q-Y8V6nq@am^;1`ntN(bG}D&=FNH2OQ0QMyZZZ< zZ|AMG0$b-bUitLGfu$#^=MK$Zx4r;vupGO-=cT8v`l>~DObw3Oh97$?Hq?%*`kVJE ub+)T&CHTkYkLt#4Ki}$WXy2(Z6_#Guq0v-S?W}D9RTT?5kABgndgp&9$>weV literal 1201 zcmb`G+iw&F7{#ZhKq<5~6l#G|3KT6=vt5!%v$xruncdm4yr{*$!Sir(o_;y`zMOZq zx4quwXDS#fN2p9L=t+APAD#nji^}{ zEyh$GjmkzRMkN$p(O`<7u%l)ekLL0YoCn>sono1oVkcRM;1in8Ce@gx+t9E_l5biO z2hKqx=fpWH62jssFC~iU42V!}N)S>SuVf}{m@k&LQ(P>Uw|YY+Hz8+pE|NzR3jVBQ z?y-w7L-^JEwkbS(ab(OPCPK1`NHRnTcADc;8WUA)C_~J^XE;Kfkrbz&agzc}iex-} z4-HPT(Z@{GhA|Mv+Qhh5lFe?)f`pK$?8G<|8xxca91xkP`pfkPY)S>a!Jw=-XpWOL z2gyA^f=-N`d0R4<7t$FA#$icq=(Y*uViqJgeAjCChrh?0qG`W?_W5t1$r-??Q&`)@qD>mu)krS$aE zA)}d1X@j>O%lZ>L!MkIraR&~1NV7XA=bi*a`JpcalLABv*C%0GkZm~Yp!jiwc8Q6; zk+IuOY-;9!lI)5k!ji&BX(p)x|A$sSE&31h(ldXy3845NU{-N;)#Rd^`+oTGO;=I> z0C=i=`F>$!oBg#tFTPim{Iw)_z6O3c+0<+}Ry?b)Xi>e|SO}DNwE+#%j`LSqA|)R@ z<+|U$WT@LUxbwa-(p}x8?z~iKFI%>`zMb7`1(5Obx|JK7M-4}TjV~|XqOt{+tFQhx z)LXH;t+L|ag1X&Z3kw$&+$dhq-w|(b>sj1Tv-O+fr+a44AFKVWVAa6SOFGZK`?uMA z?0VO!JsllK8h>wFwQOzU;eq36=V-|W!=rVFPt=`$?#QXFP{r!*??2z9lVtDUnfcY7 z>(oy(gD2Oo*zRv;CkrDjbIXS6-yTl+%MOI=_T9s#7M@+R{)=;G%1_Eb53zs6{=Hwu zd>86l2U`;(Q0v?|Te`m+Fzh0pe``%=7jU5T69YSE+1I?K`rDq09jhngURUK7%eI2q z-o_To=EjZ9rALAK+QGsq12AWCRk?BA+Jo(ft`u!}SX=YTPkrF_2JVkesCk}FemrmK jf{%*MEj?js-84(*9ZiR72f7h06!|!4uwoK49LPj-2&MMKg`Eq z4T_>;n^8eP$ebgA6xm8?rDB0nXnXD5^$oq=tF(953af+O_j}!Nf5bldbC*6Y+?kIo{oc=hJ9RY3@%H#8rEx_2kjGGqc zpnS2VCoBP1Sa4DT2cTmCc$hd578={MdMh#H3Zm1|yN@M21$ZbASg;}IG?oH3ALB{^ z7C;(67bUo8(MyYuA;j5)J1oq}@&nXA8k{jqy3wg23IvAr)2)4dj)AbER$8KGl1 z9rvV zyc7oTO1qYkKm@?a0BfF4+e48UOwYlzEy!Vu`Ev<09A(60V@Ka87BW7O1SmU6J|U+q ze=p!+-WiISy-Z-Sf;U@YA4(tO7KXqOF!?21Rb73M96pN_WFRG`tCc<5UY@yie$6gr>(+-m zyRT;`J9anZZ&ISFw(PMNzZrhEuXcU&hNGno&tOE?c&}#V`kKjoU(k6qe{$%x;j)i4 zhi$uSx3nL=(VwjV*?OKwV^;TJN zK?T|U(cbOV&0n9Yy4h3s`t%w7&LzGYWizawI;cKbn^AP9%(^D0s^h~-O{Tuol6&)& z+_e>IWLIC7y%kevIJ$7z#skerbjOjb(&HN*`}Z9_bC2yw_Axx}%=Z z7MFj{wv(q;D>Qj6MXzd*!xrwjrPR#m2fr0%fAZ#;wtX4nKRv&$KrkVyd#c$BOSdkx zD;4LyJiP+BnymeP#U^vprTia|3)w4QE7^IVe0j6FZRuWQ^PcJ=)2I2!3-@)(Rqv{6 zN7goWA39KaLftl8lY93o^M+pvE>ykrt%<5zw((MhB6rI>O?3sUH5Ct=FPhKqS1943 VO2uu1_HBjw&}XLW%FIk;+rPGA-Ut8y literal 1212 zcmc(e?N1v80LG7(ZZH@b2#5)rFfqf~4}dH}WQL8GF~P{<7BdqBiCZwy1&x|e?a{kyfkJz4DD$82`S5)G<@Y4d zvE#L6Py8j}qnIS((OUKaC*jW!}6h$z8=t^iE3C>0*lnnRL| zctf-#(}ILkoS)mU5)9%C%~>2c6?(81UD}L3!TffDMLZ1XrYUA)MG!%pS`kGbv+fUV zaFXoh1)C>$b8Kc++H&!NcG2!-)=UxJxE@1%oB?v$J#0kUx;1(a4}?c%jIfJ=qk_fh z{~ISwQE_QAX4#C5X%>T`JfU6GEW&m-GrtjoJoK`QMhNaP>_Z9WzQYST116Yo`Z&KR z`RIsw+gy|}l5>z8?BhV3UX^8?8G)lb=m$Vnmr0Wf1pUUG%(Tdu{QN zol*@?Lj(sCEbe11xZeo6UH-7m%OHWUArdp;0W!FD?e?U_;q&ogARPI5>@TZ_K`3s* zV6i#_j3f{J_7HN@c7j>n)Lc1I z$}LUl2GW(CC#O12bi;kw8DCUfEt?|hRS9?VUb^$bv-yWVKmX;0lB?*;$@kl`a*Fd4 zMvi}&nxn4t5WxPPbJ%QtLH*M%Tb}DW0wlx@H5FWsuNz3%**gA- zTN5`}+Z9N{VPx3NlZBv$s&)n0%mlru%YUwlbqOzNjvLhq7t5rAv`~9ywD9y!J1M CqR~76 diff --git a/mozilla/themes/modern/communicator/sidebar/sbtab-rit-top.gif b/mozilla/themes/modern/communicator/sidebar/sbtab-rit-top.gif index 00c638b3e6ac4743b73f7ef6aff338ad8eb2c53d..437617dc7be001d9e7767a37413150d387abde9e 100644 GIT binary patch delta 758 zcmVS^yU5hV(cHq&+{e=1 zik+{|+2F*`*~``4!Oq&i%-X}x*v8V`#?su_;N;ok?8?>My2#VX)Zf$GaV@c-{tDW(A%iE#=gqfi=D5z$J5Ex;KI+_(%a*xw#K%?(b3!D)7<09)ZF6e z>)Ye#$kX54^<=W%x&DYAuU? zw8GA=z01SU*}Tft(Awd#z|F|g-Ke<5-sS7CzRSwi;nLgU!OX(W+_J&W!Ohpl(%i+-+1und?5MfQyUEq#>h9y|?7z#^yvfzU z%-6up*0{#gLi%-F%t+r`n^th&qL=j+won~DlMMqEe-j8yAVbCx zCyU@Lv62J^fQJwxN`$yY2?9DfLhLy7;Le5(8a_CjND^X(2nNdB*g;?ch6iEt;Gqyg zNXe20IJ~&hAj*OV7&c&7K!Ab*8)$A$L;wM$ff`UWq|hMf0RaXIbb$DxG$IWP9z2|U z0j5EUKOe4|xFDeij;;^We|+^JHUfthbvmSFu(qv>6L67O@WB*9&IT<8aJiZl#0nQB zR delta 737 zcmV<70v`R)2*3z`M@dFFIbk3G4FLB50Kv=Em!z_!vBBTv@5RsC!_3*$-Q&#D;LO(H z%-7-B-{#BJ;L6nC(%Iq1(%j9}-^|tE+~McR)85C?-pA41&e-DJ*yQQ$+_-s0%%-{k7w<>|}R-_+mc%+uY(&f4Va?!wI4o2a+U)ZNe5 z;K=<<8jS(%j_V z#LnBn%+|BP0Zajt&;b^c4FeT_0|*=#;7kx5Qoh6y z0HC46hY%f35tLvJlOr{N5b;n3#swP;BZ_p02f_g)CTals5N3~uG$7D~2stw1fdw?) zNZ|8f%n2An^!QL=U3Tw2XJ!GaTfUAjFt}^XE_y38@1HLzgBXp5UF)xx^qA0tgNu9V|e;{1OZpHl#?AXiJU( TESww?6QvNA0r>Oh4+sD|9){FA diff --git a/mozilla/themes/modern/communicator/sidebar/sidebar.css b/mozilla/themes/modern/communicator/sidebar/sidebar.css index 27ffb1df7b0..c1c17bf1ec1 100644 --- a/mozilla/themes/modern/communicator/sidebar/sidebar.css +++ b/mozilla/themes/modern/communicator/sidebar/sidebar.css @@ -43,20 +43,41 @@ #sidebar-box { border-left: 1px solid #8998AA; - background-color: #C1CBD5; + background-color: #B9C4D0; } /* ::::: sidebar header ::::: */ -.sidebarheader-main { - -moz-binding: url("chrome://communicator/skin/sidebar/sidebarBindings.xml#sidebarheader") !important; - -moz-box-align: center; - border-top: 1px solid #DFE5EF; +.grippy-aligner { + width: 10px; border-left: 1px solid #DFE5EF; - padding: 3px 0px 2px 6px; - background-color: #C1CBD5; + border-top: 1px solid #DFE5EF; +} + +.toolbar-button-aligner { + width: 51px; +} + +.toolbar-button-aligner[prefixhidden="true"] { + width: 0px; +} + +.sidebar-header-text { color: #000000; font-weight: bold; + -moz-box-align: center; +} + +.sidebar-header-body { + border-top: 1px solid #DFE5EF; + -moz-box-align: center; +} + +.sidebarheader-main { + -moz-binding: url("chrome://communicator/skin/sidebar/sidebarBindings.xml#sidebarheader") !important; + background-color: #B9C4D0; + background-image: url("chrome://communicator/skin/sidebar/sbar-top.gif"); + background-repeat: no-repeat; } /* ..... picker button ..... */ @@ -65,6 +86,7 @@ margin-right: 1px; margin-top: 1px; padding: 2px; + -moz-user-focus:normal !important; } #sidebar-panel-picker:hover { @@ -86,10 +108,12 @@ #sidebar-close-button { margin: 0px 1px; -moz-binding: url("chrome://global/content/bindings/toolbarbutton.xml#toolbarbutton-image"); - padding: 0px 2px 0px 4px; + padding: 4px 2px 4px 4px; list-style-image: url("chrome://global/skin/icons/closebox.gif"); } + + /* ::::: loading info ::::: */ .text-panel-loading { @@ -110,7 +134,7 @@ .iframe-panel { -moz-binding: url("chrome://global/skin/globalBindings.xml#iframe-miniscroll") !important; border-bottom: 6px solid; - -moz-border-bottom-colors: #C1CBD5 #C1CBD5 #C1CBD5 #C1CBD5 #DFE5EF #A1ADBE; + -moz-border-bottom-colors: #B9C4D0 #B9C4D0 #B9C4D0 #B9C4D0 #DAE3ED #96A7B8; } /* ::::: sidebar tabs ::::: */ @@ -120,7 +144,7 @@ .box-texttab { -moz-binding: url("chrome://communicator/skin/sidebar/sidebarBindings.xml#sidebar-tab"); color: #000000; - border-left: 1px solid #DFE5EF; + border-left: 1px solid #DAE3ED; } .sidebar-tab-left-box, @@ -130,8 +154,8 @@ .sidebar-tab-left-box { border-top: 2px solid; - border-bottom: 1px solid #C1CBD5; - -moz-border-top-colors: #97A4B2 #DFE5EF; + border-bottom: 1px solid #B9C4D0; + -moz-border-top-colors: #8A9DAF #D4E1EA; min-width: 90px; } @@ -157,14 +181,14 @@ .sidebar-tab-right-line { border-bottom: 2px solid; - -moz-border-bottom-colors: #DFE5EF #97A4B2; + -moz-border-bottom-colors: #DAE3ED #96A7B8; } /* ..... hover state ..... */ .box-texttab:hover > .sidebar-tab-left-box { border-bottom: 2px solid; - -moz-border-bottom-colors: #DFE5EF #99A8B9; + -moz-border-bottom-colors: #CCD7E2 #9CADBB; } .box-texttab:hover > .sidebar-tab-right-box > .sidebar-tab-right-top-box @@ -186,10 +210,10 @@ .box-texttab:hover:active > .sidebar-tab-left-box { border-left: 2px solid; - -moz-border-bottom-colors: #DFE5EF #ADB9C5; - -moz-border-top-colors: #97A4B2 #838D97; - -moz-border-left-colors: #97A4B2 #AAB5C1; - background-color: #ADB9C5; + -moz-border-bottom-colors: #D8E2EC #A1B1BE ; + -moz-border-top-colors: #8A9DAF #748490; + -moz-border-left-colors: #737E8A #90A0AD; + background-color: #A1B1BE; } .box-texttab:hover:active > .sidebar-tab-left-box > .sidebar-tab-left { @@ -213,16 +237,16 @@ /* ..... selected state ..... */ .box-texttab[selected] { - border-left: 1px solid #EAF0F7 !important; - border-bottom: 1px solid #97A4B2 !important; + border-left: 1px solid #E8EEF5 !important; + border-bottom: 1px solid #CBD5E0 !important; color: #000000 !important; } .box-texttab[selected] > .sidebar-tab-left-box { border-bottom: none !important; border-left: none !important; - -moz-border-top-colors: #97A4B2 #E6EAF4 !important; - background-color: #D2D8E3 !important; + -moz-border-top-colors: #8A9DAF #DFEBF2 !important; + background-color: #CBD5E0 !important; } .box-texttab[selected] > .sidebar-tab-left-box, @@ -245,7 +269,12 @@ } .box-texttab[selected] > .sidebar-tab-right-box > .sidebar-tab-right-btm { - background: #D2D8E3 !important; + background: #CBD5E0 !important; +} + +.box-texttab[selected] > .sidebar-tab-right-box > .sidebar-tab-right-top-box > .sidebar-tab-right-line +{ + -moz-border-bottom-colors: #E2EAF4 #8CA2B3 !important; } /* ::::: sidebar navigation buttons ::::: */ diff --git a/mozilla/themes/modern/communicator/sidebar/sidebarBindings.xml b/mozilla/themes/modern/communicator/sidebar/sidebarBindings.xml index 5524cac53fa..6d38c5c4234 100644 --- a/mozilla/themes/modern/communicator/sidebar/sidebarBindings.xml +++ b/mozilla/themes/modern/communicator/sidebar/sidebarBindings.xml @@ -55,10 +55,22 @@ - - - - + + + + + + + + + + + + + + + diff --git a/mozilla/themes/modern/communicator/taskbar/addressbook-16.gif b/mozilla/themes/modern/communicator/taskbar/addressbook-16.gif index 51fd8231508f30160998a3e03377a228fcbc3833..f8551d4f16134a5a1de995c164a02cc09cda181f 100644 GIT binary patch delta 556 zcmV+{0@MA|2jB;PM@dFFIbje05CHdT0O#!Sij0!c+~kIdkbZ)T`1$%XHb65sKy`eD zfrX9L-sUAgb%%+NLPbtVL?G$w?Rnwy}1&e`J3*x_w&b9;MrpR>lG zw8pHy&eOqOf{26H;OL;Dq_@Y^t+&CXx5=--&+PBLyM(cG!K%g5B- zyUN$Hz|6c&%h;~J&!)M`wZ_w{z0JAD)v&zBw#L+|yv&%VwZhQb!q3~Ns;;B9$k*ND zrMSt5pU}wF-?+!s!^OzH%-KU@Ez8#6#L?W+-Q^YP=KbQ03I)tENq}AK$-yr5Li6o;Y^J( zBGL#<^I#$x0VcvMA>+kI1(hB_A`q}+gBBrTlDN2`QVmN08csCX0wqR>5nvYJG@z41 zks((=uy{g5>Pl3JW+*tBB7uq&D=8LsG{7JMgdRa8VEM8_MvDkV(~QYs0SAo?GgMsY u@B#1Iwh*E)A@Kvl1Q-q+m!zMtyd^(P78)fB6B8I7D#Om$ zqRPs|&)NU~|2JV^W_yU&=;+ko>eJuq(%$LO-stD?@TJVl(A?(_8XAVXx|^e|+~erI z%h#i{!K=H+aIUR>k)AF&MZwS7Fgitvo2L^YA>Zce#L?V;;pXhe(%cjuAJ*dRv%}7? zzRDgZGJdwT(cS1)n3$`($fvl(wZzc2#nHFM(l0hb!p+!~r?axc%}j=di=C;t$J36W ztc;$jp|Zc*;^(=@)W_A|#?#(FM^ez;=cTs7VWy^ml%Ri-pL4LV;pps!nWnG5%dx@D zh?=H+ket^e^5lcvfE4p0bz2>`(clO+kLbdUfA6`lx+ z)TC*E0)wJQW5x*DKtt0D3@#YpsQ?BHN18Ks7)a8hgORNv6-;^J0m%_1IGl*k(L(}P vCIAi`xI$t@-UA^Zz$_4D000aaK4dT~u*LwG5&>ut$fBV@hE)_E3kafPp`w7YrkSR)j-9HSr?ZQjsy0{}kd>N^oT`zUqN}pFXJ=x6nx?NLHywnFl&!bF#>vXG zpfaDUwV0-{m!z<~#m<$I#gl79W!#0Y#II0S$i-01W^D2cm#y0ceDU zh5XtCuoZhj%H&#ObAs%SRiPangwGMHCHSi zBu7@HXr@tHLo!ZJF(wrTu>!L;Uqu`_P)i!hi;X*AMlA|BA7UkhWC9Kk3t=z{T?rc_ zND{snUQI4P83`;(Js~Ubz#l{R26_lH$tFpbXwZXNzzpS*rt+c zbAexpkjl-?KW1%Qh>nGioVdKfm!GVmskA39Ijpn3W^;d%o2aC$x1FW35g8h#thaD` zh@hsjij<%yDmI^|vyGOc93U-~ovM+UqmG!Rn4zu|BO6hGh?t8rK_{O zw7I@>ev5`9ke+IGgM*HnmY%B+85^*-!X_*@xxT`XnWi;3L?|seqpP-)Q2{)YU;!BzFB%a?%w06S#2$^HNU diff --git a/mozilla/themes/modern/communicator/taskbar/addressbook.gif b/mozilla/themes/modern/communicator/taskbar/addressbook.gif index 1b159633c51076ffea5b321eb250b6e0e59bbc33..ef7e183d2c5dbfb15b51a4a5d201a6aba39a1608 100644 GIT binary patch delta 522 zcmV+l0`>jd1jPh@M@dFFIbja~4FKi<04y;)hKZ2)`TBl>i!(Mrb$o@e!O(|^kT*O> zl&Zf;L?G4P=6r#QB|mlP>+O7Q9D#+6dwX@PzRsPp#h$XowZ_xE%-ET(!pzj$sJhF? z)ZW*>JjBu5!Oz;V!_lU>%EQszPE%di-Q&*M@f;;OvNprWL% zzt4h*gQTjm&e`JB+vBCU$*{b~?CQPvqT+2IYtspMaqkfH#SNY22~$15rk$02M`Qg zQU)n7COQFA3Iz&$HS&=m%mgtBw0t2HA`JpV M7}Wqsk|q!UI~U{=OaK4? delta 503 zcmVm!zMtyd^(P78)fB6B8I7D#Om$ zqRPs|&)NU~|2JV^W_yU&=;+ko>eJuq(%$LO-stD?@TJVl(A?(_8XAVXx|^e|+~erI z%h#i{!K=H+aIUR>k)AF&MZwS7Fgitvo2L^YA>Zce#L?V;;pXhe(%cjuAJ*dRv%}7? zzRDgZGJdwT(cS1)n3$`($fvl(wZzc2#nHFM(l0hb!p+!~r?axc%}j=di=C;t$J36W ztc;$jp|Zc*;^(=@)W_A|#?#(FM^ez;=cTs7VWy^ml%Ri-pL4LV;pps!nWnG5%dx@D zh?=H+ket^ePm3x(YDMGdmgvNi7{lIpLfNQ#Vf@NJmOSQaDZ`Iz1*5;+XINaNxid5+GI(JP;xS tgjNNj3|ImH1BMS71`GfYAV7^D8Vd*-q@^Q^LLCWJ>BzFB%a?%w06P`1=Zm)%;OhsPMa~;+{)$1x$8fF{xmYR4+xIVtnOLA z>&T_cSO5I^o0(G(l~Q>3@eBW;XnTA6-@pH4*7TNj%uG(rS+niHwY!hqJcDfPJ!BNL z5=&a2zkdJv&AaT}(r@3t|NHk(OiH!3zUe<0FyH`+KUo+V7|I!RK=PnCVPN0bP~Ozs z(%RPE>Lpatqa9{u;mWBR?|poT3F7k zB4Qtt@1R>!de9?YtK8T!T{$*MLZF0+g|)0Kq@3H6pUY9&O8>yY%kt$6;#oY_5utj? z7cP}Cmb3E($mSU)<|dQ|rd$?lVrOVDIGEBs-LiO@udvgJh7JJ^QLUJu749ybmjy(! Z8l0MYgtKcl>|E5!zG$)rFDny+H2@J;3Wxvz literal 998 zcmZ?wbhEHb6krfw_|Cv^?7~ekDb@e~|5sMmML0No|Ndjyx*ch0X^&5D`Sc>Qc5kU-?hl4x@%@@N1wg3PkL#? zwgabDY(4nl)7NQBHY%zb{Q3JgqpByfyy@!Q$Mq8y)b`Jhj7bR&i+lF^U3Px?>o;$W z%^jlS(vr(M&Yi!QTT-`X%ijE=imaO6ruM%0q)aDQzp{>*Q7MI;vsQNW&uEyi;M=$F z=Pz8cb@0q6YpiYTymI?detCnOvR+PA>xRY|6Q<5xxn-Z6l5S{R*2Z0j>$<1@{PpYh z?K{fqhL^8gtL>SUQQman;^mC$p1Y4-h_p?mK=#$I#};xoi8DExU02UjL-&g-yMeE?-@~W&g*U zH*>4oe*OBLP~4haRBLYS0u13%K<5xp{K>)yvQh^`fbs+b$6*FW4jGRP3l283^6GF1 zD0uTUvv4pNFgSU1h)Paau`y_wx2R;@2Z0EMWk;m=-6w6)_|VF^fSJ8ZK*H$Qktrgj zWh@#8COa~7iZZaAC}idnHOOJ&k$CXgDS*Mx%H@Rc6XrGsrde7N8OJy{HOj*dC^$1P zGO_ZrNo`oHJV9J0Ut@~vhXcHhtvr{HNIqDwo`IJwG{D0lq9Ktnm*>&~VYbu4nznHZ m5)%bHdWAK1-1uPl;>?_8?|%X_KO{G^ItmD^5|a>Mum%8H> diff --git a/mozilla/themes/modern/communicator/taskbar/composer-act.gif b/mozilla/themes/modern/communicator/taskbar/composer-act.gif index a7e9a256cd32eb54d65e6dd4f9be4db3574711ea..73b52c0a4ef3cea04a615730680bbffac56f28a8 100644 GIT binary patch delta 757 zcmVH zd_h4%HaI_>nulIuX3 zV{dxU(9j|v9%FBJOjKWCVrU;ABA}vw7I`RMNAnO7tzwvW@24oaDZ57c3WFp)6>*DJwX=`oP*4D?+*|VVmBLROb00000695eW z00`~?JqcK$sbH5lYKFi$vcwRX5S~0Sc<=`XjtD037|2uu42MN3&dl+YU;&#V6dVak zvm?-*N=QBsAdo=}lLZM3=s_W8#vn77G;tbA0FsnG67~S7fCh>d8$|dt($t|uiv|G{ zF&Y8D(-tQh4gsnILWX_Np#j1ODbv+cfi;LcD9Pc4P@)E#0`#y%=RibH11yMOfhEWo zD^ob7nB?b?4+nn%7qDZb%7!PKHpOTnsS|_=kt03;;wE#aPCwq9j&dScnh%kG2$ nfoo4M3X#A>BhrN{S*YYuaJvm97d&)0_`>A?0tHF_1_S^*;GRR2 delta 666 zcmV;L0%iS)2!aTIM@dFFIbjn34FLB50LIYS5)&TM($ZvPXh%3T%gfAER8*m;vbwC4 zJT4Z(#j|=}F457^dQ2`kJxBlm0JgTak&=~{kvVR5g<55CUTJk{bAw%Ha~vETSYvK( zZ*{AzuD!v;SYvNtVrV8NF&P^sj+LOCqN`V7b2~jm&Cbq$i;5yyjEPoYa;mGXFE2XF%gb?l ziZ(bvTxM}xUS?BXah9B>cY1+#cYHrVNvf)>DJnF=!oxB&JdTu|R$p?>&CSlv&nhc5 zTU}$Vw!dC~X?w4*vR!9#tFO0QXK|ycvn?+;FEKo4Z+<#EL~wL{Sz~WhRa#+deMCl0 zPg-qGP*#J4h^VQne1nmcnxiErGI)WIijkZf9VuXHcBQPfD=jrkOjNF~uooC3NlQ{R zH9xepwThCS#>UF6uCG#DZ(3exMoL#hM^a&HcCWM+yJc>DW@l}2ad&5Nf=W+J5F zqN8{H(UX=jiE$l%w$T^<`yde}RYH+fcCerR@ofxgGkX?B1zH9v)iji$4|JU>Wl zc!S*C-eq1?-{0SCZgq5qnE3ekcz=mnWN~+Tf%*FSMoCgkPgfiuDq3T18XqcodxBcnBvOeTpFUYKkUX> zPsC3OD7fHJra>Y{FFb+JF`-V31%Ck#xZnX28wZ^_WfGAEl$i&SBO1^oAu}jYX9%6P yAt`i3F{V$;2G!$$>rZIxNg_NV+-Q8+=gs`%;A|fJXbbq>{M0<*vg@}$n zLriCNfVRNOsI|fH^7WRau^}Ze{QdoCdW>mzg4NyQe~_SmeUG16Tx3&LUgqoWYj1b! z?Cmo*KwDmBV|Iwn&(Upkeyp^;Z*q8Qe2s#Kj$dMFLPbt?h?!bsafzC#h>w_nkf8SV z_s`JMJwQolc7c6?iPYQTZ+CzmBQ9)ug|LB`kd>XOw7wo9EmdA>vAV;4i$g_k)zMn*|e93U#M zy2NH^ZDewNE-^cwp{2gZ&@3@L#Lm{frl!!>-j9+TmvMrP($m$aw7>D$*=>7<`uh7| zbA@AaeK$Kqv+)5O0g?h(lMMqCf8PKB7+4UXV3rsF5-LncfPg>{LbilhkpYPsJyyze zsUqWmA3OvWh$%5+jfW#iTJR|Fg$bYo5)Kq0Fl3Ag5mQps*%6?C&jJh@z^niuK#m(O z;7|d>CcuEFK`$sE3cyK+2odrG`G6rn69G{bJWy!H2nh~Q?f`&6W&i;MV+h1fP-wu8 zjy{3B;CMqpz*__l+(cP8uwZ~Rah^I@EI@;ng$b3Yppc-lfXkQLSb&_62Awcip74>< r;{_TPaySD3QsV>)E>~>$7<6V11l0hR{2?-7#E%UY1VPxNFdzUs?0YoR diff --git a/mozilla/themes/modern/editor/editor.css b/mozilla/themes/modern/editor/editor.css index 90f9b416abd..0326055457d 100644 --- a/mozilla/themes/modern/editor/editor.css +++ b/mozilla/themes/modern/editor/editor.css @@ -60,5 +60,6 @@ /* Multiline textarea for HTML source editing */ #content-source, #doctype-text { font-family : -moz-fixed; + font-size: -moz-initial; } diff --git a/mozilla/themes/modern/editor/icons/btn1.gif b/mozilla/themes/modern/editor/icons/btn1.gif index daff85321ca8dc9d00c029c4952adabb4bb0ae75..d911757abb5249d75854c9d3d21665d04d1a561a 100644 GIT binary patch delta 38556 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 delta 37143 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 diff --git a/mozilla/themes/modern/global/browser.css b/mozilla/themes/modern/global/browser.css index c2d96863fd3..3c2c0ecf648 100644 --- a/mozilla/themes/modern/global/browser.css +++ b/mozilla/themes/modern/global/browser.css @@ -72,7 +72,7 @@ tab[busy] { .tabs-closebutton { margin: 0px 4px; - padding: 4px 2px 4px 2px; + padding: 3px 2px; border: none; list-style-image: url("chrome://global/skin/icons/close.gif"); } @@ -83,4 +83,20 @@ tab[busy] { .tabs-closebutton:hover:active { list-style-image: url("chrome://global/skin/icons/close-act.gif"); -} \ No newline at end of file +} + +.tabs-newbutton { + margin: 0px; + padding: 2px 0px 3px 2px; + border: none; + list-style-image: url("chrome://global/skin/icons/tab-new.gif"); +} + +.tabs-newbutton:hover { + list-style-image: url("chrome://global/skin/icons/tab-new-hov.gif"); +} + +.tabs-newbutton:hover:active { + list-style-image: url("chrome://global/skin/icons/tab-new-act.gif"); +} + diff --git a/mozilla/themes/modern/global/menu.css b/mozilla/themes/modern/global/menu.css index dfa7aa93a19..59ecdd0c3ca 100644 --- a/mozilla/themes/modern/global/menu.css +++ b/mozilla/themes/modern/global/menu.css @@ -157,7 +157,7 @@ popup > menuitem[_moz-menuactive="true"] { menulist > menupopup > menuitem, .menulist-menupopup > menu, menulist > menupopup > menu { - padding-right: 12px; + padding-right: 26px; padding-top: 1px; padding-bottom: 1px; max-width: none; diff --git a/mozilla/themes/modern/global/toolbar.css b/mozilla/themes/modern/global/toolbar.css index aa112bbcbc2..d6ef747a3ea 100644 --- a/mozilla/themes/modern/global/toolbar.css +++ b/mozilla/themes/modern/global/toolbar.css @@ -41,12 +41,6 @@ @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); -/* ::::: toolbox ::::: */ - -toolbox { - border-bottom: 1px solid #494F5D; -} - /* ::::: toolbar ::::: */ toolbar { @@ -56,11 +50,15 @@ toolbar { color: #000000; } +toolbar > .toolbar-prefix { + border-top: 1px solid #EEF0F3; + border-left: 1px solid #EEF0F3; +} + toolbar > .toolbar-holder { border-top: 1px solid #EEF0F3; border-right: 1px solid #86929E; border-bottom: 1px solid #86929E; - border-left: 1px solid #EEF0F3; } /* ::::: menubar ::::: */ diff --git a/mozilla/themes/modern/global/toolbarbutton.css b/mozilla/themes/modern/global/toolbarbutton.css index 760b6f7d314..2dc0ba9e202 100644 --- a/mozilla/themes/modern/global/toolbarbutton.css +++ b/mozilla/themes/modern/global/toolbarbutton.css @@ -62,23 +62,23 @@ toolbarbutton { } toolbarbutton:hover { - border-top: 1px solid #EEF0F3; - border-right: 1px solid #86929E; - border-bottom: 1px solid #86929E; - border-left: 1px solid #EEF0F3; + border-top-color: #EEF0F3; + border-right-color: #86929E; + border-bottom-color: #86929E; + border-left-color: #EEF0F3; } toolbarbutton:hover:active, toolbarbutton[open="true"] { - border-top: 1px solid #86929E; - border-right: 1px solid #EEF0F3; - border-bottom: 1px solid #EEF0F3; - border-left: 1px solid #86929E; + border-top-color: #86929E; + border-right-color: #EEF0F3; + border-bottom-color: #EEF0F3; + border-left-color: #86929E; padding: 2px 1px 0px 3px; } toolbarbutton[disabled="true"] { - border: 1px solid transparent !important; + border-color: transparent !important; padding: 1px 2px !important; color: #9399AB !important; } @@ -86,10 +86,10 @@ toolbarbutton[disabled="true"] { /* ..... checked state ..... */ toolbarbutton[checked="true"] { - border-top: 1px solid #454C55 !important; - border-right: 1px solid #7D848D !important; - border-bottom: 1px solid #7D848D !important; - border-left: 1px solid #454C55 !important; + border-top-color: #454C55 !important; + border-right-color: #7D848D !important; + border-bottom-color: #7D848D !important; + border-left-color: #454C55 !important; background-color: #8C9AA8 !important; color: #EFF1F4; } diff --git a/mozilla/themes/modern/jar.mn b/mozilla/themes/modern/jar.mn index bb9de43b1bf..6f80f29f355 100644 --- a/mozilla/themes/modern/jar.mn +++ b/mozilla/themes/modern/jar.mn @@ -57,6 +57,7 @@ modern.jar: skin/modern/communicator/search/search.css (communicator/search/search.css) skin/modern/communicator/alerts/alert.css (communicator/alerts/alert.css) skin/modern/communicator/sidebar/sidebarBindings.xml (communicator/sidebar/sidebarBindings.xml) + skin/modern/communicator/sidebar/sbar-top.gif (communicator/sidebar/sbar-top.gif) skin/modern/communicator/sidebar/sbtab-rit-top-act.gif (communicator/sidebar/sbtab-rit-top-act.gif) skin/modern/communicator/sidebar/sbtab-rit-btm-act.gif (communicator/sidebar/sbtab-rit-btm-act.gif) skin/modern/communicator/sidebar/sbtab-rit-top.gif (communicator/sidebar/sbtab-rit-top.gif) @@ -199,6 +200,9 @@ modern.jar: skin/modern/global/icons/close-act.gif (global/icons/close-act.gif) skin/modern/global/icons/close.gif (global/icons/close.gif) skin/modern/global/icons/close-hov.gif (global/icons/close-hov.gif) + skin/modern/global/icons/tab-new.gif (global/icons/tab-new.gif) + skin/modern/global/icons/tab-new-hov.gif (global/icons/tab-new-hov.gif) + skin/modern/global/icons/tab-new-act.gif (global/icons/tab-new-act.gif) skin/modern/global/icons/closebox.gif (global/icons/closebox.gif) skin/modern/global/menu/menu-arrow-dis.gif (global/menu/menu-arrow-dis.gif) skin/modern/global/menu/menu-arrow-hov.gif (global/menu/menu-arrow-hov.gif) @@ -392,6 +396,7 @@ modern.jar: skin/modern/messenger/smime/msgCompSecurityInfo.css (messenger/smime/msgCompSecurityInfo.css) skin/modern/messenger/smime/msgReadSMIMEOverlay.css (messenger/smime/msgReadSMIMEOverlay.css) skin/modern/messenger/smime/msgCompSMIMEOverlay.css (messenger/smime/msgCompSMIMEOverlay.css) + skin/modern/messenger/smime/certFetchingStatus.css (messenger/smime/certFetchingStatus.css) skin/modern/messenger/smime/msgHdrViewSMIMEOverlay.css (messenger/smime/msgHdrViewSMIMEOverlay.css) skin/modern/messenger/smime/icons/smbtn1.gif (messenger/smime/icons/smbtn1.gif) skin/modern/messenger/smime/icons/sbSignOk.gif (messenger/smime/icons/sbSignOk.gif) diff --git a/mozilla/themes/modern/messenger/messageHeader.css b/mozilla/themes/modern/messenger/messageHeader.css index e7bf8968f82..99343600342 100644 --- a/mozilla/themes/modern/messenger/messageHeader.css +++ b/mozilla/themes/modern/messenger/messageHeader.css @@ -119,6 +119,7 @@ } .emailDisplayImage { + padding-left: 2px; -moz-box-pack: end; } diff --git a/mozilla/themes/modern/messenger/smime/msgReadSMIMEOverlay.css b/mozilla/themes/modern/messenger/smime/msgReadSMIMEOverlay.css index 9c158f67aaf..9628baa17f2 100644 --- a/mozilla/themes/modern/messenger/smime/msgReadSMIMEOverlay.css +++ b/mozilla/themes/modern/messenger/smime/msgReadSMIMEOverlay.css @@ -39,34 +39,29 @@ @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); #status-bar #signed-status { - visibility: collapsed; + list-style-image: none; } #status-bar[signed="ok"] #signed-status { list-style-image: url("chrome://messenger/skin/smime/icons/sbSignOk.gif"); - visibility: visible; } #status-bar[signed="unknown"] #signed-status { list-style-image: url("chrome://messenger/skin/smime/icons/sbSignUnknown.gif"); - visibility: visible; } #status-bar[signed="notok"] #signed-status { list-style-image: url("chrome://messenger/skin/smime/icons/sbSignNotOk.gif"); - visibility: visible; } #status-bar #encrypted-status { - visibility: collapsed; + list-style-image: none; } #status-bar[encrypted="ok"] #encrypted-status { list-style-image: url("chrome://messenger/skin/smime/icons/sbCryptoOk.gif"); - visibility: visible; } #status-bar[encrypted="notok"] #encrypted-status { list-style-image: url("chrome://messenger/skin/smime/icons/sbCryptoNotOk.gif"); - visibility: visible; } diff --git a/mozilla/themes/modern/navigator/navigator.css b/mozilla/themes/modern/navigator/navigator.css index 80f10ee2e50..d61a5aa2dab 100644 --- a/mozilla/themes/modern/navigator/navigator.css +++ b/mozilla/themes/modern/navigator/navigator.css @@ -472,10 +472,19 @@ } #PersonalToolbar > toolbargrippy, +#PersonalToolbar > .toolbar-prefix, #PersonalToolbar > .toolbar-holder { border-top: 1px solid #CED6DD; +} + +#PersonalToolbar > toolbargrippy, +#PersonalToolbar > .toolbar-holder { border-right: 1px solid #95A0AD; border-bottom: 1px solid #95A0AD; +} + +#PersonalToolbar > toolbargrippy, +#PersonalToolbar > .toolbar-prefix { border-left: 1px solid #DAE3ED; } @@ -494,6 +503,10 @@ /* ::::: content area ::::: */ +#appcontent { + border-top: 1px solid #494F5D; +} + #content { border-bottom: 1px solid #494F5D; } diff --git a/mozilla/widget/src/gtk/nsGtkEventHandler.cpp b/mozilla/widget/src/gtk/nsGtkEventHandler.cpp index b6c3370bd64..4984ad93bee 100644 --- a/mozilla/widget/src/gtk/nsGtkEventHandler.cpp +++ b/mozilla/widget/src/gtk/nsGtkEventHandler.cpp @@ -254,6 +254,12 @@ int nsPlatformToDOMKeyCode(GdkEventKey *aGEK) #if defined(SUNOS4) || defined(SOLARIS) if (keysym == GDK_F11) return NS_VK_ESCAPE; + //When F11 key is pressed in Sun keyboard, keysym is SunF36 not F11 + if (keysym == 268828432) //SunF36's value is 0x1005ff10(268828432) + return NS_VK_F11; //Change it into F11 + //When F12 key is pressed in Sun keyboard, keysym is SunF37 not F12 + if (keysym == 268828433) //SunF37's value is 0x1005ff11(268828433) + return NS_VK_F12; //Change it into F12 #endif if (keysym >= GDK_F1 && keysym <= GDK_F24) return keysym - GDK_F1 + NS_VK_F1; diff --git a/mozilla/widget/src/gtk/nsWindow.cpp b/mozilla/widget/src/gtk/nsWindow.cpp index bc429af96cd..58b209e704f 100644 --- a/mozilla/widget/src/gtk/nsWindow.cpp +++ b/mozilla/widget/src/gtk/nsWindow.cpp @@ -1893,6 +1893,15 @@ NS_METHOD nsWindow::CreateNative(GtkObject *parentWidget) // set the back pixmap to None so that we don't get a flash of // black gdk_window_set_back_pixmap(mShell->window, NULL, FALSE); + + // gdk does not automatically set the cursor for "temporary" + // windows, which are what gtk uses for popups. + + mCursor = eCursor_wait; // force SetCursor to actually set the cursor, + // even though our internal state indicates + // that we already have the standard cursor. + SetCursor(eCursor_standard); + break; case eWindowType_toplevel: diff --git a/mozilla/widget/src/gtkxtbin/gtkxtbin.c b/mozilla/widget/src/gtkxtbin/gtkxtbin.c index ff5f916eeab..23d9f05dc7e 100644 --- a/mozilla/widget/src/gtkxtbin/gtkxtbin.c +++ b/mozilla/widget/src/gtkxtbin/gtkxtbin.c @@ -213,7 +213,7 @@ gtk_xtbin_realize (GtkWidget *widget) GdkWindowAttr attributes; gint attributes_mask, n; GtkXtBin *xtbin; - Arg args[2]; + Arg args[5]; gint width, height; Widget top_widget; Window win; @@ -254,9 +254,9 @@ gtk_xtbin_realize (GtkWidget *widget) attributes.width = widget->allocation.width; attributes.height = widget->allocation.height; attributes.wclass = GDK_INPUT_OUTPUT; - attributes.visual = gtk_widget_get_visual (widget); - attributes.colormap = gtk_widget_get_colormap (widget); - attributes.event_mask = gtk_widget_get_events (widget); + attributes.visual = gdk_window_get_visual (xtbin->parent_window); + attributes.colormap = gdk_window_get_colormap (xtbin->parent_window); + attributes.event_mask = gdk_window_get_events (xtbin->parent_window); attributes.event_mask |= GDK_EXPOSURE_MASK; attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; @@ -309,6 +309,9 @@ gtk_xtbin_realize (GtkWidget *widget) n = 0; XtSetArg(args[n], XtNheight, xtbin->height);n++; XtSetArg(args[n], XtNwidth, xtbin->width);n++; + XtSetArg(args[n], XtNvisual, GDK_VISUAL_XVISUAL(gdk_window_get_visual( xtbin->parent_window )) ); n++; + XtSetArg(args[n], XtNdepth, gdk_window_get_visual( xtbin->parent_window )->depth ); n++; + XtSetArg(args[n], XtNcolormap, GDK_COLORMAP_XCOLORMAP(gdk_window_get_colormap( xtbin->parent_window)) ); n++; XtSetValues(embeded, args, n); /* Ok, here is the dirty little secret on how I am */ diff --git a/mozilla/widget/src/os2/nsAppShell.cpp b/mozilla/widget/src/os2/nsAppShell.cpp index 013a7ca746d..854942f144a 100644 --- a/mozilla/widget/src/os2/nsAppShell.cpp +++ b/mozilla/widget/src/os2/nsAppShell.cpp @@ -164,12 +164,15 @@ nsresult nsAppShell::Run() if (mDispatchListener) mDispatchListener->AfterDispatch(); } else { - if( mQmsg.hwnd) { + if ((mQmsg.hwnd) && (mQmsg.mp1 || mQmsg.mp2)) { // send WM_SYSCOMMAND, SC_CLOSE to window (tasklist close) WinSendMsg( mQmsg.hwnd, WM_SYSCOMMAND, MPFROMSHORT(SC_CLOSE), 0); } else { - if( mQuitNow) // Don't want to close the app when a window - keepGoing = 0; // is closed, just when our `Exit' is called. + // Don't want to close the app when a window + // is closed, just when our `Exit' is called or + // shutdown is invoked. + if (mQuitNow || ((mQmsg.mp1 == 0) && (mQmsg.mp2 == 0))) + keepGoing = 0; } } diff --git a/mozilla/widget/src/os2/nsDragService.cpp b/mozilla/widget/src/os2/nsDragService.cpp index 6acd6a1e3ea..a6b1609e51e 100644 --- a/mozilla/widget/src/os2/nsDragService.cpp +++ b/mozilla/widget/src/os2/nsDragService.cpp @@ -69,7 +69,7 @@ MRESULT EXPENTRY nsDragWindowProc(HWND hWnd, ULONG msg, MPARAM mp1, pszURL = (PSZ)nsMemory::Alloc(ulLength+1); DrgQueryStrName(pdragtransfer->pditem->hstrSourceName, ulLength+1, pszURL); fp = fopen(chPath, "wb+"); - fwrite(pszURL, ulLength+1, 1, fp); + fwrite(pszURL, ulLength, 1, fp); fclose(fp); WriteTypeEA(chPath, "UniformResourceLocator"); nsMemory::Free(pszURL); diff --git a/mozilla/widget/src/os2/nsFrameWindow.cpp b/mozilla/widget/src/os2/nsFrameWindow.cpp index 33ea7a41266..5e2cba2afaa 100644 --- a/mozilla/widget/src/os2/nsFrameWindow.cpp +++ b/mozilla/widget/src/os2/nsFrameWindow.cpp @@ -41,9 +41,6 @@ extern nsIRollupListener * gRollupListener; extern nsIWidget * gRollupWidget; extern PRBool gRollupConsumeRollupEvent; -extern PRBool gJustGotDeactivate; -extern HWND gHwndBeingDestroyed; - BOOL nsFrameWindow::fHiddenWindowCreated = FALSE; nsFrameWindow::nsFrameWindow() : nsWindow() @@ -61,7 +58,7 @@ void nsFrameWindow::SetWindowListVisibility( PRBool bState) HSWITCH hswitch; SWCNTRL swctl; - hswitch = WinQuerySwitchHandle(GetMainWindow(), 0); + hswitch = WinQuerySwitchHandle(mFrameWnd, 0); if( hswitch) { WinQuerySwitchEntry( hswitch, &swctl); @@ -393,22 +390,6 @@ MRESULT nsFrameWindow::FrameMessage( ULONG msg, MPARAM mp1, MPARAM mp2) WinRemoveProperty(mFrameWnd, "hwndMinMax"); WinRemoveProperty(mFrameWnd, "ulStyle"); break; - - case WM_ACTIVATE: - if( !mp1) - { - /* we don't want to go through all of this deactivation stuff if - * the window is just going away anyhow. Causes problems to process - * the deactivation event if we've hit some destructors or done - * some destroy work. Especially w.r.t the focus controller - */ - if( (mFrameWnd != gHwndBeingDestroyed) || - (!WinIsChild( mFrameWnd, gHwndBeingDestroyed )) ) - { - gJustGotDeactivate = PR_TRUE; - } - } - break; } if( !bDone) diff --git a/mozilla/widget/src/os2/nsFrameWindow.h b/mozilla/widget/src/os2/nsFrameWindow.h index 1695079c5d4..fddce1fba31 100644 --- a/mozilla/widget/src/os2/nsFrameWindow.h +++ b/mozilla/widget/src/os2/nsFrameWindow.h @@ -43,7 +43,6 @@ class nsFrameWindow : public nsWindow HWND GetMainWindow() const { return mFrameWnd; } protected: - HWND mFrameWnd; PFNWP fnwpDefFrame; nsSize mSizeClient; nsSize mSizeBorder; diff --git a/mozilla/widget/src/os2/nsModule.cpp b/mozilla/widget/src/os2/nsModule.cpp index e1a27346000..839beda9063 100644 --- a/mozilla/widget/src/os2/nsModule.cpp +++ b/mozilla/widget/src/os2/nsModule.cpp @@ -38,6 +38,8 @@ #include "resource.h" #include #include +#include "nsIPref.h" +#include "nsIServiceManager.h" // Module-level data & utility functions: // * unicode keycode & string conversion @@ -117,6 +119,13 @@ void nsWidgetModuleData::Init( nsIAppShell *aPrimaevalAppShell) for (int i=0;i<=16;i++ ) { hptrArray[i] = ::WinLoadPointer(HWND_DESKTOP, gModuleHandle, IDC_BASE+i); } + nsresult rv; + + bIsTrackPoint = PR_FALSE; + + nsCOMPtr prefs(do_GetService(NS_PREF_CONTRACTID, &rv)); + if (NS_SUCCEEDED(rv) && prefs) + prefs->GetBoolPref("os2.trackpoint", &bIsTrackPoint); } nsWidgetModuleData::~nsWidgetModuleData() diff --git a/mozilla/widget/src/os2/nsModule.h b/mozilla/widget/src/os2/nsModule.h index 58b7bbfbfeb..730bd7e4055 100644 --- a/mozilla/widget/src/os2/nsModule.h +++ b/mozilla/widget/src/os2/nsModule.h @@ -55,6 +55,7 @@ class nsWidgetModuleData : public nsISupports BOOL bMouseSwitched; // true if MB1 is the RH mouse button LONG lHtEntryfield; // ideal height of an entryfield BOOL bIsDBCS; // true if system is dbcs + PRBool bIsTrackPoint; // true if system has a TrackPoint HPOINTER hptrArray[17]; // xptoolkit services we look after, & the primaeval appshell too. diff --git a/mozilla/widget/src/os2/nsWindow.cpp b/mozilla/widget/src/os2/nsWindow.cpp index 9f746458e51..4162b3c9e68 100644 --- a/mozilla/widget/src/os2/nsWindow.cpp +++ b/mozilla/widget/src/os2/nsWindow.cpp @@ -63,7 +63,6 @@ static int WINDOWCOUNT = 0; #endif -#define kWindowPositionSlop 20 static const char *sScreenManagerContractID = "@mozilla.org/gfx/screenmanager;1"; // HWNDs are mapped to nsWindow objects using a custom presentation parameter, @@ -105,8 +104,7 @@ PRBool gRollupConsumeRollupEvent = PR_FALSE; PRBool gJustGotActivate = PR_FALSE; PRBool gJustGotDeactivate = PR_FALSE; - -HWND gHwndBeingDestroyed = NULLHANDLE; +PRBool gIsDestroyingAny = PR_FALSE; //////////////////////////////////////////////////// // Mouse Clicks - static variable defintions @@ -117,6 +115,10 @@ static LONG gLastMsgTime = 0; static LONG gLastClickCount = 0; //////////////////////////////////////////////////// +#ifdef DEBUG_FOCUS +static int currentWindowIdentifier = 0; +#endif + //------------------------------------------------------------------------- // // nsWindow constructor @@ -126,6 +128,7 @@ nsWindow::nsWindow() : nsBaseWidget() { NS_INIT_REFCNT(); mWnd = 0; + mFrameWnd = 0; mPrevWndProc = NULL; mParent = 0; mNextID = 1; @@ -148,8 +151,7 @@ nsWindow::nsWindow() : nsBaseWidget() mBorderStyle = eBorderStyle_default; mFont = nsnull; mOS2Toolkit = nsnull; - mMenuBar = nsnull; -// mActiveMenu = nsnull; + mIsScrollBar = FALSE; mIsTopWidgetWindow = PR_FALSE; } @@ -654,6 +656,13 @@ MRESULT EXPENTRY fnwpNSWindow( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) } } + // hold on to the window for the life of this method, in case it gets + // deleted during processing. yes, it's a double hack, since someWindow + // is not really an interface. + nsCOMPtr kungFuDeathGrip; + if (!wnd->mIsDestroying) // not if we're in the destructor! + kungFuDeathGrip = do_QueryInterface((nsBaseWidget*)wnd); + MRESULT mRC = 0; if( wnd) @@ -775,6 +784,8 @@ void nsWindow::RealDoCreate( HWND hwndP, style &= ~WS_CLIPSIBLINGS; } + mIsScrollBar = (!(strcmp( WindowClass(), WC_SCROLLBAR_STRING ))); + if( hwndP != HWND_DESKTOP) { // For pop-up menus, the parent is the desktop, but use the "parent" as owner @@ -789,15 +800,23 @@ void nsWindow::RealDoCreate( HWND hwndP, // For scrollbars, the parent is the owner, for notification purposes else if(!hwndOwner ) { - BOOL bHwndIsScrollBar = - (!(strcmp( WindowClass(), WC_SCROLLBAR_STRING ))); - if( bHwndIsScrollBar ) + if( mIsScrollBar ) { hwndOwner = hwndP; } } } +#ifdef DEBUG_FOCUS + mWindowIdentifier = currentWindowIdentifier; + currentWindowIdentifier++; + if (aInitData && (aInitData->mWindowType == eWindowType_toplevel)) { + printf("[%x] Create Frame Window (%d)\n", this, mWindowIdentifier); + } else { + printf("[%x] Create Window (%d)\n", this, mWindowIdentifier); + } +#endif + // Create a window: create hidden & then size to avoid swp_noadjust problems // owner == parent except for 'borderless top-level' -- see nsCanvas.cpp mWnd = WinCreateWindow( hwndP, @@ -812,6 +831,17 @@ void nsWindow::RealDoCreate( HWND hwndP, NS_ASSERTION( mWnd, "Couldn't create window"); + // This is ugly. The Thinkpad TrackPoint driver checks to see whether or not a window + // actually has a scroll bar as a child before sending it scroll messages. Needless to + // say, no Mozilla window has real scroll bars. So if you have the "os2.trackpoint" + // preference set, we put an invisible scroll bar on every child window so we can + // scroll. Woohoo! + if (gWidgetModuleData->bIsTrackPoint && mWindowType == eWindowType_child && !mIsScrollBar) { + WinCreateWindow(mWnd, WC_SCROLLBAR, 0, SBS_VERT, + 0, 0, 0, 0, mWnd, HWND_TOP, + FID_VERTSCROLL, NULL, NULL); + } + #if DEBUG_sobotka printf("\n+++++++++++In nsWindow::RealDoCreate created 0x%lx, %d x %d\n", mWnd, aRect.width, aRect.height); @@ -961,9 +991,16 @@ NS_METHOD nsWindow::Destroy() if( mWnd) { - gHwndBeingDestroyed = (mHackDestroyWnd ? mHackDestroyWnd : mWnd); - WinDestroyWindow( gHwndBeingDestroyed); - gHwndBeingDestroyed = NULLHANDLE; + HWND hwndBeingDestroyed = mFrameWnd ? mFrameWnd : mWnd; + gIsDestroyingAny = PR_TRUE; +#ifdef DEBUG_FOCUS + printf("[%x] Destroy (%d)\n", this, mWindowIdentifier); +#endif + if (hwndBeingDestroyed == WinQueryFocus(HWND_DESKTOP)) { + WinSetFocus(HWND_DESKTOP, WinQueryWindow(hwndBeingDestroyed, QW_PARENT)); + } + WinDestroyWindow(hwndBeingDestroyed); + gIsDestroyingAny = PR_FALSE; } } return NS_OK; @@ -1211,6 +1248,8 @@ NS_METHOD nsWindow::ConstrainPosition(PRBool aAllowSlop, } } +#define kWindowPositionSlop 100 + if (doConstrain) { if (aAllowSlop) { if (*aX < screenRect.xLeft - mBounds.width + kWindowPositionSlop) @@ -1218,8 +1257,8 @@ NS_METHOD nsWindow::ConstrainPosition(PRBool aAllowSlop, else if (*aX >= screenRect.xRight - kWindowPositionSlop) *aX = screenRect.xRight - kWindowPositionSlop; - if (*aY < screenRect.yTop - mBounds.height + kWindowPositionSlop) - *aY = screenRect.yTop - mBounds.height + kWindowPositionSlop; + if (*aY < screenRect.yTop) + *aY = screenRect.yTop; else if (*aY >= screenRect.yBottom - kWindowPositionSlop) *aY = screenRect.yBottom - kWindowPositionSlop; @@ -1350,8 +1389,10 @@ NS_METHOD nsWindow::SetFocus(PRBool aRaise) mOS2Toolkit->CallMethod(&info); } else - if (mWnd && - (!gHwndBeingDestroyed || !WinIsChild(mWnd, gHwndBeingDestroyed))) { + if (mWnd) { +#ifdef DEBUG_FOCUS + printf("[%x] SetFocus (%d)\n", this, mWindowIdentifier); +#endif WinSetFocus( HWND_DESKTOP, mWnd); } return NS_OK; @@ -2093,6 +2134,7 @@ void nsWindow::ConstrainZLevel(HWND *aAfter) { PRBool nsWindow::ProcessMessage( ULONG msg, MPARAM mp1, MPARAM mp2, MRESULT &rc) { PRBool result = PR_FALSE; // call the default window procedure + PRBool isMozWindowTakingFocus = PR_TRUE; switch (msg) { #if 0 @@ -2294,48 +2336,76 @@ PRBool nsWindow::ProcessMessage( ULONG msg, MPARAM mp1, MPARAM mp2, MRESULT &rc) result = OnScroll( msg, mp1, mp2); break; - case WM_FOCUSCHANGED: - /* Make a test to see if we are in the process of closing, deleting - * or destroying this nsWindow. If we are, then we've already - * gotten rid of our nsDocShell->mScriptGlobal. To handle focus - * events when there is no mScriptGlobal is apparently a bad thing. - */ - if(!(mWindowState & nsWindowState_eClosing)) - { - PRBool isMozWindowTakingFocus = PR_TRUE; - if( SHORT1FROMMP( mp2 ) || mWnd == WinQueryFocus(HWND_DESKTOP) ) - { - result = DispatchFocus( NS_GOTFOCUS, isMozWindowTakingFocus ); - // Only sending an Activate event when we get a WM_ACTIVATE message - // isn't good enough; need to do this every time we gain focus. - if( !gJustGotActivate ) - { - gJustGotActivate = PR_TRUE; - if ( WinIsChild( mWnd, HWNDFROMMP(mp1)) && mNextID == 1) - result = DispatchFocus( NS_PLUGIN_ACTIVATE, isMozWindowTakingFocus ); - else - result = DispatchFocus( NS_ACTIVATE, isMozWindowTakingFocus ); - gJustGotActivate = PR_FALSE; - } - } - else - { - char className[19]; - ::WinQueryClassName((HWND)mp1, 19, className); - if (strcmp(className, WindowClass()) != 0 && - strcmp(className, WC_SCROLLBAR_STRING) != 0) - isMozWindowTakingFocus = PR_FALSE; - - if( gJustGotDeactivate ) - { - gJustGotDeactivate = PR_FALSE; - result = DispatchFocus( NS_DEACTIVATE, isMozWindowTakingFocus ); - } - result = DispatchFocus( NS_LOSTFOCUS, isMozWindowTakingFocus ); - } + case WM_ACTIVATE: +#ifdef DEBUG_FOCUS + printf("[%x] WM_ACTIVATE (%d)\n", this, mWindowIdentifier); +#endif + if (mp1) { + /* The window is being activated */ + gJustGotActivate = PR_TRUE; +#ifdef DEBUG_FOCUS + printf("[%x] NS_GOTFOCUS (%d)\n", this, mWindowIdentifier); +#endif + result = DispatchFocus(NS_GOTFOCUS, isMozWindowTakingFocus); + } else { + /* The window is being deactivated */ + gJustGotDeactivate = PR_TRUE; } break; - + + case WM_FOCUSCHANGED: +#ifdef DEBUG_FOCUS + printf("[%x] WM_FOCUSCHANGED (%d)\n", this, mWindowIdentifier); +#endif + if (SHORT1FROMMP(mp2)) { + /* We are receiving focus */ + if (!gIsDestroyingAny) { +#ifdef DEBUG_FOCUS + printf("[%x] NS_GOTFOCUS (%d)\n", this, mWindowIdentifier); +#endif + result = DispatchFocus(NS_GOTFOCUS, isMozWindowTakingFocus); + if (gJustGotActivate) { + gJustGotActivate = PR_FALSE; + gJustGotDeactivate = PR_FALSE; +#ifdef DEBUG_FOCUS + printf("[%x] NS_ACTIVATE (%d)\n", this, mWindowIdentifier); +#endif + result = DispatchFocus(NS_ACTIVATE, isMozWindowTakingFocus); + } + if ( WinIsChild( mWnd, HWNDFROMMP(mp1)) && mNextID == 1) { +#ifdef DEBUG_FOCUS + printf("[%x] NS_PLUGIN_ACTIVATE (%d)\n", this, mWindowIdentifier); +#endif + result = DispatchFocus(NS_PLUGIN_ACTIVATE, isMozWindowTakingFocus); + WinSetFocus(HWND_DESKTOP, mWnd); + } + } else { + nsToolkit *toolkit = NS_STATIC_CAST(nsToolkit *, mToolkit); + WinPostMsg(toolkit->GetDispatchWindow(), WM_FOCUSCHANGED, mp1, mp2); + } + + } else { + /* We are losing focus */ + char className[19]; + ::WinQueryClassName((HWND)mp1, 19, className); + if (strcmp(className, WindowClass()) != 0 && + strcmp(className, WC_SCROLLBAR_STRING) != 0) { + isMozWindowTakingFocus = PR_FALSE; + } + if (gJustGotDeactivate) { + gJustGotDeactivate = PR_FALSE; +#ifdef DEBUG_FOCUS + printf("[%x] NS_DEACTIVATE (%d)\n", this, mWindowIdentifier); +#endif + result = DispatchFocus(NS_DEACTIVATE, isMozWindowTakingFocus); + } +#ifdef DEBUG_FOCUS + printf("[%x] NS_LOSTFOCUS (%d)\n", this, mWindowIdentifier); +#endif + result = DispatchFocus(NS_LOSTFOCUS, isMozWindowTakingFocus); + } + break; + case WM_WINDOWPOSCHANGED: result = OnReposition( (PSWP) mp1); break; @@ -2494,9 +2564,6 @@ void nsWindow::OnDestroy() // kill font delete mFont; - // release menubar -// NS_IF_RELEASE(mMenuBar); - // dispatching of the event may cause the reference count to drop to 0 // and result in this object being deleted. To avoid that, add a // reference and then release it after dispatching the event. @@ -3024,8 +3091,12 @@ NS_METHOD nsWindow::SetTitle(const nsString& aTitle) } else if( mWnd) { + /* On OS/2, if you pass a titlebar > 512 characters, it doesn't display at all. */ + /* We are going to limit our titlebars to 256 just to be on the safe side */ + nsAutoString left; + aTitle.Left(left, 256); WinSetWindowText( GetMainWindow(), - gWidgetModuleData->ConvertFromUcs( aTitle)); + gWidgetModuleData->ConvertFromUcs(left)); } return NS_OK; } diff --git a/mozilla/widget/src/os2/nsWindow.h b/mozilla/widget/src/os2/nsWindow.h index 36ac1118886..18256b43864 100644 --- a/mozilla/widget/src/os2/nsWindow.h +++ b/mozilla/widget/src/os2/nsWindow.h @@ -41,7 +41,7 @@ #include "nsToolkit.h" #include "nsSwitchToUIThread.h" -class nsIMenuBar; +//#define DEBUG_FOCUS // Base widget class. // This is abstract. Controls (labels, radio buttons, listboxen) derive @@ -99,8 +99,6 @@ class nsWindow : public nsBaseWidget, virtual nsIWidget *GetParent(); NS_IMETHOD SetSizeMode(PRInt32 aMode); - NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar) { return NS_ERROR_FAILURE; } - NS_IMETHOD ShowMenuBar(PRBool aShow) { return NS_ERROR_FAILURE; } // Physical properties NS_IMETHOD Show( PRBool bState); @@ -143,6 +141,8 @@ class nsWindow : public nsBaseWidget, NS_IMETHOD SetCursor( nsCursor aCursor); NS_IMETHOD HideWindowChrome(PRBool aShouldHide); NS_IMETHOD SetTitle( const nsString& aTitle); + NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar) { return NS_ERROR_FAILURE; } + NS_IMETHOD ShowMenuBar(PRBool aShow) { return NS_ERROR_FAILURE; } NS_IMETHOD Invalidate( PRBool aIsSynchronous); NS_IMETHOD Invalidate( const nsRect & aRect, PRBool aIsSynchronous); NS_IMETHOD InvalidateRegion(const nsIRegion *aRegion, PRBool aIsSynchronous); @@ -229,6 +229,7 @@ protected: // PM data members HWND mWnd; // window handle + HWND mFrameWnd; // frame window handle PFNWP mPrevWndProc; // previous window procedure nsWindow *mParent; // parent widget ULONG mNextID; // next child window id @@ -243,6 +244,7 @@ protected: HWND mHackDestroyWnd; // access GetMainWindow() window from destructor QMSG mQmsg; PRBool mIsTopWidgetWindow; + BOOL mIsScrollBar; HWND GetParentHWND() const; HWND GetHWND() const { return mWnd; } @@ -294,6 +296,9 @@ protected: }; friend MRESULT EXPENTRY fnwpNSWindow( HWND, ULONG, MPARAM, MPARAM); friend MRESULT EXPENTRY fnwpFrame( HWND, ULONG, MPARAM, MPARAM); +#ifdef DEBUG_FOCUS + int mWindowIdentifier; +#endif }; #define PM2NS_PARENT NS2PM_PARENT diff --git a/mozilla/widget/src/windows/nsClipboard.cpp b/mozilla/widget/src/windows/nsClipboard.cpp index 81e294bc104..b604222bd52 100644 --- a/mozilla/widget/src/windows/nsClipboard.cpp +++ b/mozilla/widget/src/windows/nsClipboard.cpp @@ -200,7 +200,7 @@ nsresult nsClipboard::SetupNativeDataObject(nsITransferable * aTransferable, IDa #endif } else if ( strcmp(flavorStr, kPNGImageMime) == 0 || strcmp(flavorStr, kJPEGImageMime) == 0 || - strcmp(flavorStr, kGIFImageMime) == 0 ) { + strcmp(flavorStr, kGIFImageMime) == 0 || strcmp(flavorStr, kNativeImageMime) == 0 ) { // if we're an image, register the native bitmap flavor FORMATETC imageFE; SET_FORMATETC(imageFE, CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL) diff --git a/mozilla/widget/src/windows/nsDataObj.cpp b/mozilla/widget/src/windows/nsDataObj.cpp index 31d44c32b38..b48f8cb17d1 100644 --- a/mozilla/widget/src/windows/nsDataObj.cpp +++ b/mozilla/widget/src/windows/nsDataObj.cpp @@ -383,10 +383,21 @@ nsDataObj :: GetDib ( const nsACString& inFlavor, FORMATETC &, STGMEDIUM & aSTG PRNTDEBUG("nsDataObj::GetDib\n"); ULONG result = E_FAIL; + PRUint32 len = 0; nsCOMPtr genericDataWrapper; mTransferable->GetTransferData(PromiseFlatCString(inFlavor).get(), getter_AddRefs(genericDataWrapper), &len); nsCOMPtr image ( do_QueryInterface(genericDataWrapper) ); + if ( !image ) { + // In the 0.9.4 timeframe, I had some embedding clients put the nsIImage directly into the + // transferable. Newer code, however, wraps the nsIImage in a nsISupportsInterfacePointer. + // We should be backwards compatibile with code already out in the field. If we can't find + // the image directly out of the transferable, unwrap the image from its wrapper. + nsCOMPtr ptr(do_QueryInterface(genericDataWrapper)); + if ( ptr ) + ptr->GetData(getter_AddRefs(image)); + } + if ( image ) { // use a the helper class to build up a bitmap. We now own the bits, // and pass them back to the OS in |aSTG|. diff --git a/mozilla/widget/src/windows/nsDataObjCollection.cpp b/mozilla/widget/src/windows/nsDataObjCollection.cpp index c2487971832..24e76ef291d 100644 --- a/mozilla/widget/src/windows/nsDataObjCollection.cpp +++ b/mozilla/widget/src/windows/nsDataObjCollection.cpp @@ -60,7 +60,6 @@ ULONG nsDataObjCollection::g_cRef = 0; EXTERN_C GUID CDECL CLSID_nsDataObjCollection = { 0x2d851b91, 0xd4c, 0x11d3, { 0x96, 0xd4, 0x0, 0x60, 0xb0, 0xfb, 0x99, 0x56 } }; - /* * Class nsDataObjCollection */ @@ -113,11 +112,17 @@ STDMETHODIMP nsDataObjCollection::QueryInterface(REFIID riid, void** ppv) *ppv=NULL; if ( (IID_IUnknown == riid) || (IID_IDataObject == riid) ) { - *ppv = this; + *ppv = static_cast(this); AddRef(); return NOERROR; } + if ( IID_IDataObjCollection == riid ) { + *ppv = static_cast(this); + AddRef(); + return NOERROR; + } + return ResultFromScode(E_NOINTERFACE); } diff --git a/mozilla/widget/src/windows/nsDataObjCollection.h b/mozilla/widget/src/windows/nsDataObjCollection.h index 72bcd6a472f..1e1b24da513 100644 --- a/mozilla/widget/src/windows/nsDataObjCollection.h +++ b/mozilla/widget/src/windows/nsDataObjCollection.h @@ -38,6 +38,8 @@ #ifndef _NSDATAOBJCOLLECTION_H_ #define _NSDATAOBJCOLLECTION_H_ +#define INITGUID // needed for initializing the IID_IDataObjCollection GUID + #include "OLEIDL.H" #include "nsString.h" @@ -65,13 +67,24 @@ public: }; #endif +// {25589C3E-1FAC-47b9-BF43-CAEA89B79533} +DEFINE_GUID(IID_IDataObjCollection, +0x25589c3e, 0x1fac, 0x47b9, 0xbf, 0x43, 0xca, 0xea, 0x89, 0xb7, 0x95, 0x33); + +// An interface to make sure we have the right kind of object for D&D +// this way we can filter out collection objects that aren't ours +class nsIDataObjCollection : public IUnknown { +public: + +}; + /* * This ole registered class is used to facilitate drag-drop of objects which * can be adapted by an object derived from CfDragDrop. The CfDragDrop is * associated with instances via SetDragDrop(). */ -class nsDataObjCollection : public IDataObject //, public nsPIDataObjCollection +class nsDataObjCollection : public IDataObject, public nsIDataObjCollection //, public nsPIDataObjCollection { public: // construction, destruction nsDataObjCollection(); diff --git a/mozilla/widget/src/windows/nsDragService.cpp b/mozilla/widget/src/windows/nsDragService.cpp index 1723236493d..429986ff86a 100644 --- a/mozilla/widget/src/windows/nsDragService.cpp +++ b/mozilla/widget/src/windows/nsDragService.cpp @@ -163,6 +163,22 @@ NS_IMETHODIMP nsDragService::StartInvokingDragSession(IDataObject * aDataObj, PR return (DRAGDROP_S_DROP == res?NS_OK:NS_ERROR_FAILURE); } +//------------------------------------------------------------------------- +// Make Sure we have the right kind of object +nsDataObjCollection* nsDragService::GetDataObjCollection(IDataObject* aDataObj) +{ + nsDataObjCollection * dataObjCol = nsnull; + if (aDataObj) { + nsIDataObjCollection* dataObj; + if (aDataObj->QueryInterface(IID_IDataObjCollection, (void**)&dataObj) == S_OK) { + dataObjCol = NS_STATIC_CAST(nsDataObjCollection*, aDataObj); + dataObj->Release(); + } + } + + return dataObjCol; +} + //------------------------------------------------------------------------- NS_IMETHODIMP nsDragService::GetNumDropItems (PRUint32 * aNumItems) { @@ -172,7 +188,8 @@ NS_IMETHODIMP nsDragService::GetNumDropItems (PRUint32 * aNumItems) } if ( IsCollectionObject(mDataObject) ) { - nsDataObjCollection * dataObjCol = NS_STATIC_CAST(nsDataObjCollection*, mDataObject); + + nsDataObjCollection * dataObjCol = GetDataObjCollection(mDataObject); if ( dataObjCol ) *aNumItems = dataObjCol->GetNumDataObjects(); } @@ -211,7 +228,7 @@ NS_IMETHODIMP nsDragService::GetData (nsITransferable * aTransferable, PRUint32 if ( IsCollectionObject(mDataObject) ) { // multiple items, use |anItem| as an index into our collection - nsDataObjCollection * dataObjCol = NS_STATIC_CAST(nsDataObjCollection*, mDataObject); + nsDataObjCollection * dataObjCol = GetDataObjCollection(mDataObject); PRUint32 cnt = dataObjCol->GetNumDataObjects(); if (anItem >= 0 && anItem < cnt) { IDataObject * dataObj = dataObjCol->GetDataObjectAt(anItem); @@ -271,7 +288,7 @@ NS_IMETHODIMP nsDragService::IsDataFlavorSupported(const char *aDataFlavor, PRBo SET_FORMATETC(fe, format, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL | TYMED_FILE | TYMED_GDI); // See if any one of the IDataObjects in the collection supports this data type - nsDataObjCollection* dataObjCol = NS_STATIC_CAST(nsDataObjCollection*, mDataObject); + nsDataObjCollection* dataObjCol = GetDataObjCollection(mDataObject); if ( dataObjCol ) { PRUint32 cnt = dataObjCol->GetNumDataObjects(); for (PRUint32 i=0;iInvoke(); } + + case WM_SYSCOLORCHANGE: + { + // WM_SYSCOLORCHANGE messages are only dispatched to top + // level windows but NS_SYSCOLORCHANGE messages must be dispatched + // to all windows including child windows. We dispatch these messages + // from the nsToolkit because if we are running embedded we may not + // have a top-level nsIWidget window. + + // On WIN32 all windows are automatically invalidated after the + // WM_SYSCOLORCHANGE is dispatched so the window is drawn using + // the current system colors. + nsWindow::GlobalMsgWindowProc(hWnd, msg, wParam, lParam); + } + } #ifdef MOZ_AIMM diff --git a/mozilla/widget/src/windows/nsToolkit.h b/mozilla/widget/src/windows/nsToolkit.h index bd2f96c696f..06e29acb53d 100644 --- a/mozilla/widget/src/windows/nsToolkit.h +++ b/mozilla/widget/src/windows/nsToolkit.h @@ -89,6 +89,7 @@ protected: public: static HINSTANCE mDllInstance; // OS flag + static PRBool mIsWinXP; static PRBool mUseImeApiW; static PRBool mW2KXP_CP936; diff --git a/mozilla/widget/src/windows/nsWindow.cpp b/mozilla/widget/src/windows/nsWindow.cpp index 9a92ad3457f..d26a0dfe1aa 100644 --- a/mozilla/widget/src/windows/nsWindow.cpp +++ b/mozilla/widget/src/windows/nsWindow.cpp @@ -322,23 +322,73 @@ static PRBool is_vk_down(int vk) #define NS_IMM_SETCANDIDATEWINDOW(hIMC, candForm) \ { \ if (nsToolkit::gAIMMApp) \ - (nsToolkit::gAIMMApp->SetCandidateWindow(hIMC, candForm) == S_OK); \ + nsToolkit::gAIMMApp->SetCandidateWindow(hIMC, candForm); \ else { \ nsIMM &theIMM = nsIMM::LoadModule(); \ theIMM.SetCandidateWindow(hIMC, candForm); \ } \ } +#define NS_IMM_SETCOMPOSITIONWINDOW(hIMC, compForm) \ + { \ + if (nsToolkit::gAIMMApp) \ + nsToolkit::gAIMMApp->SetCompositionWindow(hIMC, compForm); \ + else { \ + nsIMM &theIMM = nsIMM::LoadModule(); \ + theIMM.SetCompositionWindow(hIMC, compForm); \ + } \ + } + #define NS_IMM_GETCOMPOSITIONWINDOW(hIMC, compForm) \ { \ if (nsToolkit::gAIMMApp) \ - (nsToolkit::gAIMMApp->GetCompositionWindow(hIMC, compForm) == S_OK); \ + nsToolkit::gAIMMApp->GetCompositionWindow(hIMC, compForm); \ else { \ nsIMM &theIMM = nsIMM::LoadModule(); \ theIMM.GetCompositionWindow(hIMC, compForm); \ } \ } +#define NS_IMM_GETCOMPOSITIONFONT(hIMC, lf) \ + { \ + if (nsToolkit::gAIMMApp) \ + nsToolkit::gAIMMApp->GetCompositionFontA(hIMC, lf); \ + else { \ + nsIMM &theIMM = nsIMM::LoadModule(); \ + theIMM.GetCompositionFontA(hIMC, lf); \ + } \ + } + +#define NS_IMM_SETCOMPOSITIONFONT(hIMC, lf) \ + { \ + if (nsToolkit::gAIMMApp) \ + nsToolkit::gAIMMApp->SetCompositionFontA(hIMC, lf); \ + else { \ + nsIMM &theIMM = nsIMM::LoadModule(); \ + theIMM.SetCompositionFontA(hIMC, lf); \ + } \ + } + +#define NS_IMM_GETCOMPOSITIONFONTW(hIMC, lf) \ + { \ + if (nsToolkit::gAIMMApp) \ + nsToolkit::gAIMMApp->GetCompositionFontW(hIMC, lf); \ + else { \ + nsIMM &theIMM = nsIMM::LoadModule(); \ + theIMM.GetCompositionFontW(hIMC, lf); \ + } \ + } + +#define NS_IMM_SETCOMPOSITIONFONTW(hIMC, lf) \ + { \ + if (nsToolkit::gAIMMApp) \ + nsToolkit::gAIMMApp->SetCompositionFontW(hIMC, lf); \ + else { \ + nsIMM &theIMM = nsIMM::LoadModule(); \ + theIMM.SetCompositionFontW(hIMC, lf); \ + } \ + } + #define NS_IMM_SETCONVERSIONSTATUS(hIMC, pfdwConversion, pfdwSentence, bRet) \ { \ bRet = TRUE; \ @@ -404,6 +454,36 @@ static PRBool is_vk_down(int vk) theIMM.SetCandidateWindow(hIMC, candForm); \ } +#define NS_IMM_SETCOMPOSITIONWINDOW(hIMC, compForm) \ + { \ + nsIMM &theIMM = nsIMM::LoadModule(); \ + theIMM.SetCompositionWindow(hIMC, compForm); \ + } + +#define NS_IMM_GETCOMPOSITIONFONT(hIMC, lf) \ + { \ + nsIMM &theIMM = nsIMM::LoadModule(); \ + theIMM.GetCompositionFont(hIMC, lf); \ + } + +#define NS_IMM_GETCOMPOSITIONFONTW(hIMC, lf) \ + { \ + nsIMM &theIMM = nsIMM::LoadModule(); \ + theIMM.GetCompositionFontW(hIMC, lf); \ + } + +#define NS_IMM_SETCOMPOSITIONFONT(hIMC, lf) \ + { \ + nsIMM &theIMM = nsIMM::LoadModule(); \ + theIMM.SetCompositionFont(hIMC, lf); \ + } + +#define NS_IMM_SETCOMPOSITIONFONTW(hIMC, lf) \ + { \ + nsIMM &theIMM = nsIMM::LoadModule(); \ + theIMM.SetCompositionFontW(hIMC, lf); \ + } + #define NS_IMM_SETCONVERSIONSTATUS(hIMC, lpfdwConversion, lpfdwSentence) \ { \ nsIMM &theIMM = nsIMM::LoadModule(); \ @@ -564,6 +644,67 @@ private: static nsAttentionTimerMonitor *gAttentionTimerMonitor = 0; +PRBool gIsDestroyingAny = PR_FALSE; + + +// Code to dispatch WM_SYSCOLORCHANGE message to all child windows. +// WM_SYSCOLORCHANGE is only sent to top-level windows, but the +// cross platform API requires that NS_SYSCOLORCHANGE message be sent to +// all child windows as well. When running in an embedded application +// we may not receive a WM_SYSCOLORCHANGE message because the top +// level window is owned by the embeddor. Note: this code can be used to +// dispatch other global messages (i.e messages that must be sent to all +// nsIWidget instances. + +// Enumerate all child windows sending aMsg to each of them + +BOOL CALLBACK nsWindow::BroadcastMsgToChildren(HWND aWnd, LPARAM aMsg) +{ + LONG proc = ::GetWindowLong(aWnd, GWL_WNDPROC); + if (proc == (LONG)&nsWindow::WindowProc) { + // its one of our windows so go ahead and send a message to it + WNDPROC winProc = (WNDPROC)GetWindowLong(aWnd, GWL_WNDPROC); + ::CallWindowProc(winProc, aWnd, aMsg, 0, 0); + } + // Send message to children of this window + ::EnumChildWindows(aWnd, nsWindow::BroadcastMsgToChildren, aMsg); + return TRUE; +} + +// Enumerate all top level windows specifying that the children of each +// top level window should be enumerated. Do *not* send the message to +// each top level window since it is assumed that the toolkit will send +// aMsg to them directly. + +BOOL CALLBACK nsWindow::BroadcastMsg(HWND aTopWindow, LPARAM aMsg) +{ + // Iterate each of aTopWindows child windows sending the aMsg + // to each of them. + EnumChildWindows(aTopWindow, nsWindow::BroadcastMsgToChildren, aMsg); + return TRUE; +} + +// This method is called from nsToolkit::WindowProc to forward global +// messages which need to be dispatched to all child windows. + +void nsWindow::GlobalMsgWindowProc(HWND hWnd, UINT msg, + WPARAM wParam, LPARAM lParam) + +{ + switch (msg) { + case WM_SYSCOLORCHANGE: + // System color changes are posted to top-level windows only. + // The NS_SYSCOLORCHANGE must be dispatched to all child + // windows as well. + ::EnumThreadWindows(GetCurrentThreadId(), nsWindow::BroadcastMsg, msg); + break; + } +} + +// End of the methods to dispatch global messages + + + //------------------------------------------------------------------------- // // nsISupport stuff @@ -638,6 +779,7 @@ nsWindow::nsWindow() : nsBaseWidget() mIMECompClauseStringSize = 0; mIMECompClauseStringLength = 0; mIMEReconvertUnicode = NULL; + mLeadByte = '\0'; static BOOL gbInitGlobalValue = FALSE; if(! gbInitGlobalValue) { @@ -1409,7 +1551,11 @@ NS_METHOD nsWindow::Destroy() mEventCallback = nsnull; if (gAttentionTimerMonitor) gAttentionTimerMonitor->KillTimer(mWnd); + + gIsDestroyingAny = PR_TRUE; VERIFY(::DestroyWindow(mWnd)); + gIsDestroyingAny = PR_FALSE; + mWnd = NULL; //our windows can be subclassed by //others and these namless, faceless others @@ -2725,7 +2871,10 @@ BOOL nsWindow::OnKeyDown( UINT aVirtualKeyCode, UINT aScanCode, LPARAM aKeyData) DispatchKeyEvent(NS_KEY_PRESS, 0, NS_VK_TAB, aKeyData); } else if (mIsControlDown && !mIsShiftDown && aVirtualKeyCode == NS_VK_SUBTRACT) { - DispatchKeyEvent(NS_KEY_PRESS, aVirtualKeyCode-64, 0, aKeyData); + DispatchKeyEvent(NS_KEY_PRESS, '-', 0, aKeyData); + } + else if (mIsControlDown && !mIsShiftDown && aVirtualKeyCode == NS_VK_ADD) { + DispatchKeyEvent(NS_KEY_PRESS, '+', 0, aKeyData); } else if ((mIsControlDown && !mIsShiftDown) && ((( NS_VK_0 <= aVirtualKeyCode) && (aVirtualKeyCode <= NS_VK_9)) || @@ -2782,19 +2931,13 @@ BOOL nsWindow::OnKeyUp( UINT aVirtualKeyCode, UINT aScanCode, LPARAM aKeyData) BOOL nsWindow::OnChar( UINT mbcsCharCode, UINT virtualKeyCode, bool isMultiByte ) { wchar_t uniChar; - char charToConvert[2]; + char charToConvert[3]; size_t length; if (mIMEIsComposing) { HandleEndComposition(); } - { - charToConvert[0] = LOBYTE(mbcsCharCode); - length=1; - } - - if(mIsControlDown && (virtualKeyCode <= 0x1A)) // Ctrl+A Ctrl+Z, see Programming Windows 3.1 page 110 for details { // need to account for shift here. bug 16486 @@ -2820,8 +2963,31 @@ BOOL nsWindow::OnChar( UINT mbcsCharCode, UINT virtualKeyCode, bool isMultiByte } else { + if (!isMultiByte) { + if (mLeadByte) { // mLeadByte is used for keeping the lead-byte of CJK char + charToConvert[0] = mLeadByte; + charToConvert[1] = LOBYTE(mbcsCharCode); + mLeadByte = '\0'; + length=2; + } + else { + charToConvert[0] = LOBYTE(mbcsCharCode); + if (::IsDBCSLeadByteEx(gCurrentKeyboardCP, charToConvert[0])) { + mLeadByte = charToConvert[0]; + return TRUE; + } + length=1; + } + } else { + // SC double-byte punctuation mark in Windows-English is 0x0000aca3 + uniChar = LOWORD(mbcsCharCode); + charToConvert[0] = LOBYTE(uniChar); + charToConvert[1] = HIBYTE(uniChar); + mLeadByte = '\0'; + length=2; + } ::MultiByteToWideChar(gCurrentKeyboardCP,MB_PRECOMPOSED,charToConvert,length, - &uniChar,sizeof(uniChar)); + &uniChar, 1); virtualKeyCode = 0; mIsShiftDown = PR_FALSE; } @@ -3338,6 +3504,15 @@ PRBool nsWindow::ProcessMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT case WM_DISPLAYCHANGE: DispatchStandardEvent(NS_DISPLAYCHANGED); break; + + case WM_SYSCOLORCHANGE: + // Note: This is sent for child windows as well as top-level windows. + // The Win32 toolkit normally only sends these events to top-level windows. + // But we cycle through all of the childwindows and send it to them as well + // so all presentations get notified properly. + // See nsWindow::GlobalMsgWindowProc. + DispatchStandardEvent(NS_SYSCOLORCHANGED); + break; case WM_NOTIFY: // TAB change @@ -3446,7 +3621,6 @@ PRBool nsWindow::ProcessMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT } unsigned char ch = (unsigned char)wParam; - UINT char_result; // and J and generate exactly the same char code // but we want to "eat" the event for because @@ -3461,15 +3635,10 @@ PRBool nsWindow::ProcessMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT // if ((wParam <= 0xff) && (ch==0x0d || ch==0x08)) { - result = OnChar(ch,ch==0x0d ? VK_RETURN : VK_BACK,true); + result = OnChar(wParam, ch==0x0d ? VK_RETURN : VK_BACK, false); break; } - - { - char_result = ch; - result = OnChar(char_result,ch,false); - } - + result = OnChar(wParam, ch, (wParam > 0xff)); break; } case WM_SYSKEYUP: @@ -3752,16 +3921,23 @@ PRBool nsWindow::ProcessMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT } case WM_SETFOCUS: - result = DispatchFocus(NS_GOTFOCUS, isMozWindowTakingFocus); - if(gJustGotActivate) { - gJustGotActivate = PR_FALSE; - result = DispatchFocus(NS_ACTIVATE, isMozWindowTakingFocus); - } -#ifdef ACCESSIBILITY - if (nsWindow::gIsAccessibilityOn && !mRootAccessible && mIsTopWidgetWindow) - CreateRootAccessible(); -#endif + if(!gIsDestroyingAny) { + result = DispatchFocus(NS_GOTFOCUS, isMozWindowTakingFocus); + if(gJustGotActivate) { + gJustGotActivate = PR_FALSE; + gJustGotDeactivate = PR_FALSE; + result = DispatchFocus(NS_ACTIVATE, isMozWindowTakingFocus); + } +#ifdef ACCESSIBILITY + if (nsWindow::gIsAccessibilityOn && !mRootAccessible && mIsTopWidgetWindow) + CreateRootAccessible(); +#endif + } else { + nsToolkit *toolkit = NS_STATIC_CAST(nsToolkit *, mToolkit); + VERIFY(::PostMessage(toolkit->GetDispatchWindow(), WM_SETFOCUS, + wParam, lParam)); + } break; case WM_KILLFOCUS: @@ -3850,7 +4026,7 @@ PRBool nsWindow::ProcessMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT because in testing it seems an accurate harbinger of an impending min/max/restore change (WM_NCCALCSIZE would also work, but it's also sent when merely resizing.)) */ - if (wp->flags & SWP_FRAMECHANGED) { + if (wp->flags & SWP_FRAMECHANGED && ::IsWindowVisible(mWnd)) { WINDOWPLACEMENT pl; pl.length = sizeof(pl); ::GetWindowPlacement(mWnd, &pl); @@ -3866,6 +4042,22 @@ PRBool nsWindow::ProcessMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT InitEvent(event, NS_SIZEMODE); result = DispatchWindowEvent(&event); + + if (pl.showCmd == SW_SHOWMINIMIZED) { + // Deactivate + char className[19]; + ::GetClassName((HWND)wParam, className, 19); + if(strcmp(className, WindowClass())) + isMozWindowTakingFocus = PR_FALSE; + + gJustGotDeactivate = PR_FALSE; + result = DispatchFocus(NS_DEACTIVATE, isMozWindowTakingFocus); + } else if (pl.showCmd == SW_SHOWNORMAL){ + // Make sure we're active + result = DispatchFocus(NS_GOTFOCUS, PR_TRUE); + result = DispatchFocus(NS_ACTIVATE, PR_TRUE); + } + NS_RELEASE(event.widget); } break; @@ -3928,6 +4120,8 @@ PRBool nsWindow::ProcessMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT break; case WM_IME_CHAR: + // We receive double byte char code. No need to worry about the + mIsShiftDown = PR_FALSE; result = OnIMEChar((BYTE)(wParam>>8), (BYTE) (wParam & 0x00FF), lParam); @@ -5145,6 +5339,10 @@ NS_METHOD nsWindow::SetPreferredSize(PRInt32 aWidth, PRInt32 aHeight) } #define ZH_CN_INTELLEGENT_ABC_IME ((HKL)0xe0040804L) +#define ZH_CN_MS_PINYIN_IME_3_0 ((HKL)0xe00e0804L) +#define ZH_CN_NEIMA_IME ((HKL)0xe0050804L) +#define USE_OVERTHESPOT_IME(kl) ((nsToolkit::mIsWinXP) \ + && (ZH_CN_MS_PINYIN_IME_3_0 == (kl))) void nsWindow::HandleTextEvent(HIMC hIMEContext,PRBool aCheckAttr) @@ -5242,7 +5440,7 @@ nsWindow::HandleTextEvent(HIMC hIMEContext,PRBool aCheckAttr) } -void +BOOL nsWindow::HandleStartComposition(HIMC hIMEContext) { NS_ASSERTION( !mIMEIsComposing, "conflict state"); @@ -5261,6 +5459,27 @@ nsWindow::HandleStartComposition(HIMC hIMEContext) // // Post process event // + if (USE_OVERTHESPOT_IME(gKeyboardLayout)) { + LOGFONT lf; + NS_IMM_GETCOMPOSITIONFONT(hIMEContext, &lf); + lf.lfHeight = event.theReply.mCursorPosition.height; + NS_IMM_SETCOMPOSITIONFONT(hIMEContext, &lf); + + COMPOSITIONFORM cf; + memset(&cf, NULL, sizeof(COMPOSITIONFORM)); + cf.dwStyle = CFS_POINT; + cf.ptCurrentPos.x = event.theReply.mCursorPosition.x + IME_X_OFFSET; + cf.ptCurrentPos.y = event.theReply.mCursorPosition.y + IME_Y_OFFSET; + NS_IMM_SETCOMPOSITIONWINDOW(hIMEContext, &cf); + + InitEvent(event,NS_COMPOSITION_END,&point); + event.eventStructType = NS_COMPOSITION_END; + event.compositionMessage = NS_COMPOSITION_END; + (void)DispatchWindowEvent(&event); + NS_RELEASE(event.widget); + return PR_FALSE; + } + if((0 != event.theReply.mCursorPosition.width) || (0 != event.theReply.mCursorPosition.height) ) { @@ -5290,6 +5509,7 @@ nsWindow::HandleStartComposition(HIMC hIMEContext) mIMECompUnicode = new nsAutoString(); mIMEIsComposing = PR_TRUE; + return PR_TRUE; } void @@ -5459,14 +5679,58 @@ BOOL nsWindow::OnIMEChar(BYTE aByte1, BYTE aByte2, LPARAM aKeyState) #ifdef DEBUG_IME printf("OnIMEChar\n"); #endif - NS_ASSERTION(PR_TRUE, "should not got an WM_IME_CHAR"); + wchar_t uniChar; + char charToConvert[3]; + size_t length; + int err = 0; - // not implement yet - return PR_FALSE; + if (aByte1) { + charToConvert[0] = aByte1; + charToConvert[1] = aByte2; + length=2; + } + else { + charToConvert[0] = aByte2; + length=1; + } + err = ::MultiByteToWideChar(gCurrentKeyboardCP, MB_PRECOMPOSED, charToConvert, length, + &uniChar, 1); + +#ifdef DEBUG_IME + if (!err) { + DWORD lastError = ::GetLastError(); + switch (lastError) + { + case ERROR_INSUFFICIENT_BUFFER: + printf("ERROR_INSUFFICIENT_BUFFER\n"); + break; + + case ERROR_INVALID_FLAGS: + printf("ERROR_INVALID_FLAGS\n"); + break; + + case ERROR_INVALID_PARAMETER: + printf("ERROR_INVALID_PARAMETER\n"); + break; + + case ERROR_NO_UNICODE_TRANSLATION: + printf("ERROR_NO_UNICODE_TRANSLATION\n"); + break; + } + } +#endif + + // We need to return TRUE here so that Windows doesnt' + // send two WM_CHAR msgs + DispatchKeyEvent(NS_KEY_PRESS, uniChar, 0, 0); + return PR_TRUE; } //========================================================================== BOOL nsWindow::OnIMEComposition(LPARAM aGCS) { + if (USE_OVERTHESPOT_IME(gKeyboardLayout)) + return PR_FALSE; + #ifdef DEBUG_IME printf("OnIMEComposition\n"); #endif @@ -5720,6 +5984,9 @@ BOOL nsWindow::OnIMECompositionFull() //========================================================================== BOOL nsWindow::OnIMEEndComposition() { + if (USE_OVERTHESPOT_IME(gKeyboardLayout)) + return PR_FALSE; + #ifdef DEBUG_IME printf("OnIMEEndComposition\n"); #endif @@ -5954,7 +6221,9 @@ BOOL nsWindow::OnIMESetContext(BOOL aActive, LPARAM& aISC) if(! aActive) ResetInputState(); - aISC &= ~ ISC_SHOWUICOMPOSITIONWINDOW; + if (!USE_OVERTHESPOT_IME(gKeyboardLayout)) + aISC &= ~ ISC_SHOWUICOMPOSITIONWINDOW; + // We still return false here because we need to pass the // aISC w/ ISC_SHOWUICOMPOSITIONWINDOW clear to the default // window proc so it will draw the candidcate window for us... @@ -5976,9 +6245,9 @@ BOOL nsWindow::OnIMEStartComposition() if (hIMEContext==NULL) return PR_TRUE; - HandleStartComposition(hIMEContext); + PRBool rtn = HandleStartComposition(hIMEContext); NS_IMM_RELEASECONTEXT(mWnd, hIMEContext); - return PR_TRUE; + return rtn; } //========================================================================== diff --git a/mozilla/widget/src/windows/nsWindow.h b/mozilla/widget/src/windows/nsWindow.h index 01271489e59..728cfc6486b 100644 --- a/mozilla/widget/src/windows/nsWindow.h +++ b/mozilla/widget/src/windows/nsWindow.h @@ -83,6 +83,9 @@ class nsIMM typedef LONG (CALLBACK *SetCStatusPtr) (HIMC,DWORD,DWORD); typedef LONG (CALLBACK *NotifyIMEPtr) (HIMC,DWORD,DWORD,DWORD); typedef LONG (CALLBACK *SetCandWindowPtr) (HIMC,LPCANDIDATEFORM); + typedef LONG (CALLBACK *SetCompWindowPtr) (HIMC,LPCOMPOSITIONFORM); + typedef LONG (CALLBACK *GetCompFontPtr) (HIMC, PLOGFONT); + typedef LONG (CALLBACK *SetCompFontPtr) (HIMC, PLOGFONT); typedef LONG (CALLBACK *GetCompWindowPtr) (HIMC,LPCOMPOSITIONFORM); typedef LONG (CALLBACK *GetPropertyPtr) (HKL, DWORD); @@ -123,6 +126,21 @@ public: mGetCompositionWindow=(mInstance) ? (GetCompWindowPtr)GetProcAddress(mInstance,"ImmGetCompositionWindow") : 0; NS_ASSERTION(mGetCompositionWindow!=NULL,"nsIMM.ImmGetCompositionWindow failed."); + + mGetCompositionFontA=(mInstance) ? (GetCompFontPtr)GetProcAddress(mInstance,"ImmGetCompositionFontA") : 0; + NS_ASSERTION(mGetCompositionFontA!=NULL,"nsIMM.ImmGetCompositionFontA failed."); + + mGetCompositionFontW=(mInstance) ? (GetCompFontPtr)GetProcAddress(mInstance,"ImmGetCompositionFontW") : 0; + NS_ASSERTION(mGetCompositionFontW!=NULL,"nsIMM.ImmGetCompositionFontW failed."); + + mSetCompositionFontA=(mInstance) ? (SetCompFontPtr)GetProcAddress(mInstance,"ImmSetCompositionFontA") : 0; + NS_ASSERTION(mSetCompositionFontA!=NULL,"nsIMM.ImmSetCompositionFontA failed."); + + mSetCompositionFontW=(mInstance) ? (SetCompFontPtr)GetProcAddress(mInstance,"ImmSetCompositionFontW") : 0; + NS_ASSERTION(mSetCompositionFontW!=NULL,"nsIMM.ImmSetCompositionFontW failed."); + + mSetCompositionWindow=(mInstance) ? (SetCompWindowPtr)GetProcAddress(mInstance,"ImmSetCompositionWindow") : 0; + NS_ASSERTION(mSetCompositionWindow!=NULL,"nsIMM.ImmSetCompositionWindow failed."); mGetProperty=(mInstance) ? (GetPropertyPtr)GetProcAddress(mInstance,"ImmGetProperty") : 0; NS_ASSERTION(mGetProperty!=NULL,"nsIMM.ImmGetProperty failed."); @@ -141,6 +159,11 @@ public: mNotifyIME=0; mSetCandiateWindow=0; mGetCompositionWindow=0; + mSetCompositionWindow=0; + mGetCompositionFontA=0; + mGetCompositionFontA=0; + mSetCompositionFontW=0; + mSetCompositionFontW=0; mGetProperty=0; } @@ -176,6 +199,26 @@ public: return (mSetCandiateWindow) ? mSetCandiateWindow(h,l) : 0L; } + LONG SetCompositionWindow(HIMC h,LPCOMPOSITIONFORM l) { + return (mSetCompositionWindow) ? mSetCompositionWindow(h,l) : 0L; + } + + LONG GetCompositionFontA(HIMC h, PLOGFONT l) { + return (mGetCompositionFontA) ? mGetCompositionFontA(h,l) : 0L; + } + + LONG GetCompositionFontW(HIMC h, PLOGFONT l) { + return (mGetCompositionFontW) ? mGetCompositionFontW(h,l) : 0L; + } + + LONG SetCompositionFontA(HIMC h, PLOGFONT l) { + return (mSetCompositionFontA) ? mSetCompositionFontA(h,l) : 0L; + } + + LONG SetCompositionFontW(HIMC h, PLOGFONT l) { + return (mSetCompositionFontW) ? mSetCompositionFontW(h,l) : 0L; + } + LONG GetCompositionWindow(HIMC h,LPCOMPOSITIONFORM l) { return (mGetCompositionWindow) ? mGetCompositionWindow(h,l) : 0L; } @@ -195,6 +238,11 @@ private: SetCStatusPtr mSetConversionStatus; NotifyIMEPtr mNotifyIME; SetCandWindowPtr mSetCandiateWindow; + SetCompWindowPtr mSetCompositionWindow; + GetCompFontPtr mGetCompositionFontA; + GetCompFontPtr mGetCompositionFontW; + SetCompFontPtr mSetCompositionFontA; + SetCompFontPtr mSetCompositionFontW; GetCompWindowPtr mGetCompositionWindow; GetPropertyPtr mGetProperty; }; @@ -412,7 +460,7 @@ protected: void GetNonClientBounds(nsRect &aRect); void HandleTextEvent(HIMC hIMEContext, PRBool aCheckAttr=PR_TRUE); - void HandleStartComposition(HIMC hIMEContext); + BOOL HandleStartComposition(HIMC hIMEContext); void HandleEndComposition(void); void MapDBCSAtrributeArrayToUnicodeOffsets(PRUint32* textRangeListLengthResult, nsTextRangeArray* textRangeListResult); @@ -429,22 +477,29 @@ private: protected: nsSize mLastSize; static nsWindow* gCurrentWindow; - PRBool mIsTopWidgetWindow; nsPoint mLastPoint; HWND mWnd; #if 0 HPALETTE mPalette; #endif WNDPROC mPrevWndProc; - - PRBool mHas3DBorder; HBRUSH mBrush; - PRBool mIsShiftDown; - PRBool mIsControlDown; - PRBool mIsAltDown; - PRBool mIsDestroying; - PRBool mOnDestroyCalled; - PRBool mIsVisible; + + PRPackedBool mIsTopWidgetWindow; + PRPackedBool mHas3DBorder; + PRPackedBool mIsShiftDown; + PRPackedBool mIsControlDown; + PRPackedBool mIsAltDown; + PRPackedBool mIsDestroying; + PRPackedBool mOnDestroyCalled; + PRPackedBool mIsVisible; + PRPackedBool mIMEIsComposing; + PRPackedBool mIMEIsStatusChanged; + PRPackedBool mIsInMouseCapture; + PRPackedBool mIsInMouseWheelProcessing; + + char mLeadByte; + // XXX Temporary, should not be caching the font nsFont * mFont; @@ -459,8 +514,6 @@ protected: // For Input Method Support DWORD mIMEProperty; - PRBool mIMEIsComposing; - PRBool mIMEIsStatusChanged; nsCString* mIMECompString; nsString* mIMECompUnicode; PRUint8* mIMEAttributeString; @@ -476,9 +529,6 @@ protected: static UINT gCurrentKeyboardCP; static HKL gKeyboardLayout; - PRBool mIsInMouseCapture; - PRBool mIsInMouseWheelProcessing; - // Drag & Drop nsNativeDragTarget * mNativeDragTarget; @@ -513,6 +563,11 @@ protected: IAccessible* mRootAccessible; static BOOL gIsAccessibilityOn; #endif + + static BOOL CALLBACK BroadcastMsgToChildren(HWND aWnd, LPARAM aMsg); + static BOOL CALLBACK BroadcastMsg(HWND aTopWindow, LPARAM aMsg); +public: + static void GlobalMsgWindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); }; // diff --git a/mozilla/widget/src/xlib/Makefile.in b/mozilla/widget/src/xlib/Makefile.in index dd2348aafb5..3a9958268d3 100644 --- a/mozilla/widget/src/xlib/Makefile.in +++ b/mozilla/widget/src/xlib/Makefile.in @@ -31,7 +31,7 @@ MODULE = widget LIBRARY_NAME = widget_xlib EXPORT_LIBRARY = 1 IS_COMPONENT = 1 -MODULE_NAME = nsWidgetXLibModule +MODULE_NAME = nsWidgetXLIBModule REQUIRES = xpcom \ string \ appshell \ diff --git a/mozilla/xpfe/browser/resources/content/browser.js b/mozilla/xpfe/browser/resources/content/browser.js index e368c2f7c88..921e893a47c 100644 --- a/mozilla/xpfe/browser/resources/content/browser.js +++ b/mozilla/xpfe/browser/resources/content/browser.js @@ -39,6 +39,8 @@ * ***** END LICENSE BLOCK ***** */ const nsIWebNavigation = Components.interfaces.nsIWebNavigation; +var gPrintSettingsAreGlobal = true; +var gSavePrintSettings = true; var gPrintSettings = null; var gChromeState = null; // chrome state before we went into print preview var gOldCloseHandler = null; // close handler before we went into print preview @@ -196,23 +198,28 @@ function BrowserExitPrintPreview() mainWin.setAttribute("onclose", gOldCloseHandler); } -function GetPrintSettings(webBrowserPrint) +function GetPrintSettings() { var prevPS = gPrintSettings; try { if (gPrintSettings == null) { - var useGlobalPrintSettings = true; var pref = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefBranch); if (pref) { - useGlobalPrintSettings = pref.getBoolPref("print.use_global_printsettings", false); + gPrintSettingsAreGlobal = pref.getBoolPref("print.use_global_printsettings", false); + gSavePrintSettings = pref.getBoolPref("print.save_print_settings", false); } - if (useGlobalPrintSettings) { - gPrintSettings = webBrowserPrint.globalPrintSettings; + var psService = Components.classes["@mozilla.org/gfx/printsettings-service;1"] + .getService(Components.interfaces.nsIPrintSettingsService); + if (gPrintSettingsAreGlobal) { + gPrintSettings = psService.globalPrintSettings; + if (gSavePrintSettings) { + psService.initPrintSettingsFromPrefs(gPrintSettings, false, gPrintSettings.kInitSaveNativeData); + } } else { - gPrintSettings = webBrowserPrint.newPrintSettings; + gPrintSettings = psService.newPrintSettings; } } } catch (e) { @@ -244,8 +251,8 @@ function BrowserPrintPreview() var webBrowserPrint = ifreq.getInterface( Components.interfaces.nsIWebBrowserPrint); if (webBrowserPrint) { - gPrintSettings = GetPrintSettings(webBrowserPrint); - webBrowserPrint.printPreview(gPrintSettings); + gPrintSettings = GetPrintSettings(); + webBrowserPrint.printPreview(gPrintSettings, null, null); } // show the toolbar after we go into print preview mode so @@ -269,18 +276,22 @@ function BrowserPrintSetup() var ifreq = _content.QueryInterface(Components.interfaces.nsIInterfaceRequestor); var webBrowserPrint = ifreq.getInterface(Components.interfaces.nsIWebBrowserPrint); if (webBrowserPrint) { - gPrintSettings = GetPrintSettings(webBrowserPrint); + gPrintSettings = GetPrintSettings(); } didOK = goPageSetup(window, gPrintSettings); // from utilityOverlay.js if (didOK) { if (webBrowserPrint) { + if (gPrintSettingsAreGlobal && gSavePrintSettings) { + var psService = Components.classes["@mozilla.org/gfx/printsettings-service;1"] + .getService(Components.interfaces.nsIPrintSettingsService); + psService.savePrintSettingsToPrefs(gPrintSettings, false, gPrintSettings.kInitSaveNativeData); + } if (webBrowserPrint.doingPrintPreview) { - webBrowserPrint.printPreview(gPrintSettings); + webBrowserPrint.printPreview(gPrintSettings, null, null); } } } - } catch (e) { dump("BrowserPrintSetup "+e); } @@ -293,7 +304,7 @@ function BrowserPrint() var ifreq = _content.QueryInterface(Components.interfaces.nsIInterfaceRequestor); var webBrowserPrint = ifreq.getInterface(Components.interfaces.nsIWebBrowserPrint); if (webBrowserPrint) { - gPrintSettings = GetPrintSettings(webBrowserPrint); + gPrintSettings = GetPrintSettings(); webBrowserPrint.print(gPrintSettings, null); } } catch (e) { diff --git a/mozilla/xpfe/browser/resources/content/contents-region.rdf b/mozilla/xpfe/browser/resources/content/contents-region.rdf index c1d474d2c5a..6ec02db93f4 100644 --- a/mozilla/xpfe/browser/resources/content/contents-region.rdf +++ b/mozilla/xpfe/browser/resources/content/contents-region.rdf @@ -11,7 +11,7 @@ + chrome:localeVersion="1.0.1rc1"> diff --git a/mozilla/xpfe/browser/resources/content/contents.rdf b/mozilla/xpfe/browser/resources/content/contents.rdf index a09ef74bbfd..b63b7310da0 100644 --- a/mozilla/xpfe/browser/resources/content/contents.rdf +++ b/mozilla/xpfe/browser/resources/content/contents.rdf @@ -12,7 +12,7 @@ chrome:displayName="Navigator" chrome:author="mozilla.org" chrome:name="navigator" - chrome:localeVersion="1.0.0final" + chrome:localeVersion="1.0.1rc1" chrome:skinVersion="1.0"> diff --git a/mozilla/xpfe/browser/resources/content/mac/contents-platform.rdf b/mozilla/xpfe/browser/resources/content/mac/contents-platform.rdf index 2383bfc088e..9b4757fecfd 100644 --- a/mozilla/xpfe/browser/resources/content/mac/contents-platform.rdf +++ b/mozilla/xpfe/browser/resources/content/mac/contents-platform.rdf @@ -12,6 +12,6 @@ chrome:displayName="Mac Specific Resources" chrome:author="mozilla.org" chrome:name="navigator-platform" - chrome:localeVersion="1.0.0final"> + chrome:localeVersion="1.0.1rc1"> diff --git a/mozilla/xpfe/browser/resources/content/navigator.js b/mozilla/xpfe/browser/resources/content/navigator.js index 34cf08357f7..2420c4b6448 100644 --- a/mozilla/xpfe/browser/resources/content/navigator.js +++ b/mozilla/xpfe/browser/resources/content/navigator.js @@ -104,8 +104,10 @@ const gTabStripPrefListener = return; var stripVisibility = !pref.getBoolPref(prefName); - if (gBrowser.mTabContainer.childNodes.length == 1) + if (gBrowser.mTabContainer.childNodes.length == 1) { gBrowser.setStripVisibilityTo(stripVisibility); + pref.setBoolPref("browser.tabs.forceHide", false); + } } }; @@ -292,6 +294,23 @@ function allLeftButtonsAreHidden() return true; } +function RegisterTabOpenObserver() +{ + const observer = { + observe: function(subject, topic, data) + { + if (topic != "open-new-tab-request" || subject != window) + return; + + delayedOpenTab(data); + } + }; + + const service = Components.classes["@mozilla.org/observer-service;1"] + .getService(Components.interfaces.nsIObserverService); + service.addObserver(observer, "open-new-tab-request", false); +} + function Startup() { // init globals @@ -449,6 +468,8 @@ function Startup() remoteService = Components.classes[XREMOTESERVICE_CONTRACTID] .getService(Components.interfaces.nsIXRemoteService); remoteService.addBrowserInstance(window); + + RegisterTabOpenObserver(); } } @@ -645,16 +666,12 @@ function OpenBookmarkGroupFromResource(resource, datasource, rdf) { var tabPanels = gBrowser.mPanelContainer.childNodes; var tabCount = tabPanels.length; var index = 0; - while (containerChildren.hasMoreElements()) { + for (; containerChildren.hasMoreElements(); ++index) { var resource = containerChildren.getNext().QueryInterface(Components.interfaces.nsIRDFResource); var target = datasource.GetTarget(resource, urlResource, true); if (target) { var uri = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value; - if (index < tabCount) - tabPanels[index].loadURI(uri, null, nsIWebNavigation.LOAD_FLAGS_NONE); - else - gBrowser.addTab(uri); - index++; + gBrowser.addTab(uri); } } @@ -663,11 +680,7 @@ function OpenBookmarkGroupFromResource(resource, datasource, rdf) { // Select the first tab in the group. var tabs = gBrowser.mTabContainer.childNodes; - gBrowser.selectedTab = tabs[0]; - - // Close any remaining open tabs that are left over. - for (var i = tabCount-1; i >= index; i--) - gBrowser.removeTab(tabs[i]); + gBrowser.selectedTab = tabs[tabCount]; } function OpenBookmarkURL(node, datasources) @@ -721,6 +734,17 @@ function addBookmarkAs() BookmarksUtils.addBookmarkForBrowser(gBrowser.webNavigation, true); } +function addGroupmarkAs() +{ + BookmarksUtils.addBookmarkForTabBrowser(gBrowser, true); +} + +function updateGroupmarkMenuitem(id) +{ + const disabled = gBrowser.browsers.length == 1; + document.getElementById(id).setAttribute("disabled", disabled); +} + function readRDFString(aDS,aRes,aProp) { var n = aDS.GetTarget(aRes, aProp, true); @@ -773,6 +797,15 @@ function getSearchUrl(attr) return searchURL; } +function QualifySearchTerm() +{ + // If the text in the URL bar is the same as the currently loaded + // page's URL then treat this as an empty search term. This way + // the user is taken to the search page where s/he can enter a term. + if (window.XULBrowserWindow.userTyped.value) + return document.getElementById("urlbar").value; + return ""; +} function OpenSearch(tabName, forceDialogFlag, searchStr, newWindowFlag) { @@ -1649,29 +1682,45 @@ function updateComponentBarBroadcaster() function updateToolbarStates(toolbarMenuElt) { - if (gHaveUpdatedToolbarState) { - updateComponentBarBroadcaster(); - return; - } - var mainWindow = document.getElementById("main-window"); - if (mainWindow.hasAttribute("chromehidden")) { - gHaveUpdatedToolbarState = true; - var i; - for (i = 0; i < toolbarMenuElt.childNodes.length; ++i) - document.getElementById(toolbarMenuElt.childNodes[i].getAttribute("observes")).removeAttribute("checked"); - var toolbars = document.getElementsByTagName("toolbar"); - for (i = 0; i < toolbars.length; ++i) { - if (toolbars[i].getAttribute("class").indexOf("chromeclass") != -1) - toolbars[i].setAttribute("hidden", "true"); + if (!gHaveUpdatedToolbarState) { + var mainWindow = document.getElementById("main-window"); + if (mainWindow.hasAttribute("chromehidden")) { + gHaveUpdatedToolbarState = true; + var i; + for (i = 0; i < toolbarMenuElt.childNodes.length; ++i) + document.getElementById(toolbarMenuElt.childNodes[i].getAttribute("observes")).removeAttribute("checked"); + var toolbars = document.getElementsByTagName("toolbar"); + for (i = 0; i < toolbars.length; ++i) { + if (toolbars[i].getAttribute("class").indexOf("chromeclass") != -1) + toolbars[i].setAttribute("hidden", "true"); + } + var statusbars = document.getElementsByTagName("statusbar"); + for (i = 0; i < statusbars.length; ++i) { + if (statusbars[i].getAttribute("class").indexOf("chromeclass") != -1) + statusbars[i].setAttribute("hidden", "true"); + } + mainWindow.removeAttribute("chromehidden"); } - var statusbars = document.getElementsByTagName("statusbar"); - for (i = 0; i < statusbars.length; ++i) { - if (statusbars[i].getAttribute("class").indexOf("chromeclass") != -1) - statusbars[i].setAttribute("hidden", "true"); - } - mainWindow.removeAttribute("chromehidden"); } updateComponentBarBroadcaster(); + + const tabbarMenuItem = document.getElementById("menuitem_showhide_tabbar"); + // Make show/hide menu item reflect current state + const visibility = gBrowser.getStripVisibility(); + tabbarMenuItem.setAttribute("checked", visibility); + + // Don't allow the tab bar to be shown/hidden when more than one tab is open + // or when we have 1 tab and the autoHide pref is set + const disabled = gBrowser.browsers.length > 1 || + pref.getBoolPref("browser.tabs.autoHide"); + tabbarMenuItem.setAttribute("disabled", disabled); +} + +function showHideTabbar() +{ + const visibility = gBrowser.getStripVisibility(); + pref.setBoolPref("browser.tabs.forceHide", visibility); + gBrowser.setStripVisibilityTo(!visibility); } // Fill in tooltips for personal toolbar diff --git a/mozilla/xpfe/browser/resources/content/navigator.xul b/mozilla/xpfe/browser/resources/content/navigator.xul index 06cefca0733..1171d1c6125 100644 --- a/mozilla/xpfe/browser/resources/content/navigator.xul +++ b/mozilla/xpfe/browser/resources/content/navigator.xul @@ -164,6 +164,7 @@ Contributor(s): ______________________________________. --> showCommentColumn="true" inputtooltiptext="&locationBar.tooltip;" oninput="window.XULBrowserWindow.userTyped.value=true;" + ondragdrop="window.XULBrowserWindow.userTyped.value=true;alert('foo');" ontextcommand="return handleURLBarCommand(eventParam, domEvent);" ontextrevert="return handleURLBarRevert();" onfocus="URLBarFocusHandler(event);" @@ -200,7 +201,7 @@ Contributor(s): ______________________________________. -->