From 75f3aa0691b129887a06b0bddd035fa708b3f354 Mon Sep 17 00:00:00 2001 From: eccles Date: Sun, 1 Feb 2004 23:55:08 +0000 Subject: [PATCH] - "Restores focus to its previous state when exiting" was broken. git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3446 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/NSISdl/nsisdl.cpp | 57 ++++++++++++++++++++------------------ Plugins/nsisdl.dll | Bin 12800 -> 12800 bytes 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/Contrib/NSISdl/nsisdl.cpp b/Contrib/NSISdl/nsisdl.cpp index 5edfaee0..6bde5ebd 100644 --- a/Contrib/NSISdl/nsisdl.cpp +++ b/Contrib/NSISdl/nsisdl.cpp @@ -50,6 +50,9 @@ static LRESULT CALLBACK ParentWndProc(HWND hwnd, UINT message, WPARAM wParam, LP { if (uMsgCreate && message == uMsgCreate) { + static HWND hwndPrevFocus; + static BOOL fCancelDisabled; + if (wParam) { childwnd = FindWindowEx((HWND) lParam, NULL, "#32770", NULL); @@ -59,6 +62,11 @@ static LRESULT CALLBACK ParentWndProc(HWND hwnd, UINT message, WPARAM wParam, LP HWND hwndS = GetDlgItem(childwnd, 1006); if (childwnd && hwndP && hwndS) { + // Where to restore focus to before we disable the cancel button + hwndPrevFocus = GetFocus(); + if (!hwndPrevFocus) + hwndPrevFocus = hwndP; + if (IsWindowVisible(hwndL)) ShowWindow(hwndL, SW_HIDE); else @@ -90,7 +98,7 @@ static LRESULT CALLBACK ParentWndProc(HWND hwnd, UINT message, WPARAM wParam, LP DWORD dwStyle = WS_CHILD | WS_CLIPSIBLINGS; dwStyle |= GetWindowLong(hwndP, GWL_STYLE) & PBS_SMOOTH; - + GetWindowRect(hwndP, &ctlRect); HWND pb = g_hwndProgressBar = CreateWindow( @@ -124,22 +132,15 @@ static LRESULT CALLBACK ParentWndProc(HWND hwnd, UINT message, WPARAM wParam, LP ShowWindow(pb, SW_SHOWNA); ShowWindow(s, SW_SHOWNA); + + fCancelDisabled = EnableWindow(GetDlgItem(hwnd, IDCANCEL), TRUE); + SendMessage(hwnd, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hwnd, IDCANCEL), TRUE); } else childwnd = NULL; } else if (childwnd) { - if (g_hwndStatic) - { - DestroyWindow(g_hwndStatic); - g_hwndStatic = NULL; - } - if (g_hwndProgressBar) - { - DestroyWindow(g_hwndProgressBar); - g_hwndProgressBar = NULL; - } if (hwndB) { ShowWindow(hwndB, SW_SHOWNA); @@ -151,6 +152,24 @@ static LRESULT CALLBACK ParentWndProc(HWND hwnd, UINT message, WPARAM wParam, LP hwndL = NULL; } + // Prevent wierd stuff happening if the cancel button happens to be + // pressed at the moment we are finishing and restore the previous focus + // and cancel button states + SendMessage(hwnd, WM_NEXTDLGCTL, (WPARAM)hwndPrevFocus, TRUE); + SendMessage(GetDlgItem(hwnd, IDCANCEL), BM_SETSTATE, FALSE, 0); + if (fCancelDisabled) + EnableWindow(GetDlgItem(hwnd, IDCANCEL), FALSE); + + if (g_hwndStatic) + { + DestroyWindow(g_hwndStatic); + g_hwndStatic = NULL; + } + if (g_hwndProgressBar) + { + DestroyWindow(g_hwndProgressBar); + g_hwndProgressBar = NULL; + } childwnd = NULL; } } @@ -265,9 +284,6 @@ __declspec(dllexport) void download (HWND parent, } else { - HWND hwndPrevFocus; - BOOL fCancelDisabled; - if (parent) { uMsgCreate = RegisterWindowMessage("nsisdl create"); @@ -283,11 +299,6 @@ __declspec(dllexport) void download (HWND parent, wsprintf(buf, szDownloading, p != filename ? p + 1 : p); SetDlgItemText(childwnd, 1006, buf); SetWindowText(g_hwndStatic, szConnecting); - - // enable the cancel button - hwndPrevFocus = GetFocus(); - fCancelDisabled = EnableWindow(GetDlgItem(parent, IDCANCEL), TRUE); - SendMessage(parent, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(parent, IDCANCEL), TRUE); } { WSADATA wsaData; @@ -349,14 +360,6 @@ __declspec(dllexport) void download (HWND parent, { SendMessage(parent, uMsgCreate, FALSE, (LPARAM) parent); SetWindowLong(parent, GWL_WNDPROC, (long)lpWndProcOld); - - // Prevent wierd stuff happening if the cancel button happens to be - // pressed at the moment we are finishing - SendMessage(GetDlgItem(parent, IDCANCEL), BM_SETSTATE, FALSE, 0); - // Restore the previous focus and cancel button states - SendMessage(parent, WM_NEXTDLGCTL, (WPARAM)hwndPrevFocus, TRUE); - if (fCancelDisabled) - EnableWindow(GetDlgItem(parent, IDCANCEL), FALSE); } break; } diff --git a/Plugins/nsisdl.dll b/Plugins/nsisdl.dll index bc3fb17d08b799c5ad734785c383e255dfd180d2..01e7e15503ebd72f54c64f686143d86c895ed5dd 100644 GIT binary patch delta 3897 zcmd5ME31xMJ>o*<`W8>8d0m3b+)DJSy? zi49ZfZYmi9)KXMV_;^>izJey+B^)71YQ6Gm%6HtuN_*;5?ser*YH9I3ph{iB+j4Wlh?V%*Lw;k%wcHN~!8C%91hlnPdKq@(<np&TR z(+ICVr|<^<*cqebun;k-4rQfbC1+QT8;ZEiiXpv(6P4-dgM~ln zdgaf?)4&g9UOllMl@#xPsS!$rKDm#y45b{B7E=iVBh zx@-)JaYMawVeF~GjUXa2S|JwBApCsVtN(+KS{PNXwL-H~&*yVfm?{*frxMbTsI7rj z1EiRPMSD}oe0k6xkOi|+H}2!?QPG=HSh*S!UJ^D0nXFQpRe;dvWEBddB46o~BKoi) zFltRcH;^0R)K9K(jN+l0gxB<6$|~eal|5NGNd3#K924`tc+tWId(Ffz=b1b8;|nGlqlOStmVh?<{)$ z)@1(4VSCT8f$-9Tp!!2PA<^CaQNsJx)4;_(KjBrCVf~0iJ<70bxKKZ5*btnnA8OnM zz`7V_Kp^Uyz>Q3MTO|rmhByND)Annmyh--21(;hL5r{)QG^GxOQiS9-ge<;HT z8{bokKC#hG9>i=&gOZF~vbM$l0$HEB18x%Dp@z$DFB-HE&N1G%zypDhE)e3tR+eYy zMEe+H)M84~;^>`i`z`Z%st}h_mJIQ;rq&M3ws_`d)`>=z#Odn@9~udC@F)be+zt{9 zQ-K{jjQE2k#yZyW4s*ilfJZpDro~323jh&`G)YAscQ8p?V_O@Ol8%GR)r+v{Yj^)*!kgl+uzl$@%0dck_}aV-%)X%bD=2h(jkt%{orAO|-X*P!Ma(JE zy>>4jUIrC#Ng*Lj-VcSBScyg@>mbQVGsG>R`PJFTO&)HD(*`L;zBr(dMY~hQO<)Dp zX<#*Aq{I4_LLzR|XjfmR=_*i@!IsI#5HFz?0|JzVGW?}Ip;-y9s+vY9Wy%F{8cuDw ziAc~0ill~+5S0(81*k{DYaB?4H5oB4syx>iYw9Plrl^^S&G41*o>9xtZZO0k6Z^4h{FevA8b2E@Q)cH`qijX%_rY;;V$4)B z`_;wg;ZeIV4GjaP(R#Bs?m$|sZvE&P68QOVE}s4Udy+%`9r_To#;Z3c# z;93U7{n%(hRDfDGFek!#<&AuMRPIZzj>JODkKN6-h&*I!eH<#zW2V+e+4G#K^&vc| zr4@?K?hb-=E~O>%*pmvw+Tv*e3wObU^pk|OAPl4>+}cSv^WQ>A!dmtMU{dUezWXlk zu{EH#c~u|Y^;?0W4c;>_Jp{2*?;tQ1sPCE5y;SO#56IpV%JT(z(J(|qL;eo7{u16{ zYH0>R?qh~x$2ltT>psHbn)Sb}!SLbphllkC<^}!QXMwmwtDc23J!kC_h! z#qS}W^zoUG^_y8n)2@&-x9zNcval2?&hBtJ1QTvX(nk9Vh2@>lF3dpgx`=Tc##gc| zQ}QO2WZnr)?OU2B?J3H$xE^2w@Sv3eJbxdeR2U;sbo$mP)-yr{r`)sGjqyx zP7#ZnP5X&=#ge<4n}YYOSbE=TqI_1|lrw>=YYNxi_Y>&>LdG$CR`cDn!%fSHQeCnf z|Jo_rOQvv#J3lFTHI>`1M5eBbzE$~7<=)BUY#)ibLXR6kt3qxx|5m(^#h zFIC%YD{K$hHrQUU_1I3@25lE@I=j(6-fp!|wa>7J?5pgL+n=;=w!dWGAGLpCKW;y7 z&v%qKraJ5nuVaoQ=ve4zcC28k==zQ22cmC4(vh&x@H=KK%*Se}*buPb4bUomD(6!#x=GyAo=Gy6c z%k`=2nCpb=Yu7o~h%4RgF}aJ~Gu(AIrTW*VQrGFxtT7srMRP zHLxMAOC1qwgaoxK>f}*VrcHw`bXF(pZq>#CPu5Lcwsg^ZhfO4; zTu??OI=ALV3<0f>sa0z^YU8NBoCn4eq726=l{2+j>Wa~`ax#Cwxum`^dRFd>g-jcYR<)XfWA03|qkNNDbEz9l8@Ouqtf`cHN;PFUxYg?PtP)OC@5{O?`@4KX zu-ad1+3NFIEw`)zi3}cKuZ`CD7#gG-P1>1pjI;qaYoDlf*%P_f)%xstMLWTdcbSDV z+r}wJD!K#8%u-v%aG0t6T>U7!kjq#9nLW4AnpTs|O*Ta|SG=2XDL^-wLfVy%dv99H zL95eT#5vTzn=b-Co-=-&1C^B4*Agq;SV`?gpa$kDzI@d%rtBsrqtQ~UGNDMlW6VBl zKBIeU1KR4*D8_9L_1c*8CA+{xX4EN_%pleUv^V1~0cvMlrLG8;9U0b%Tsbp^;q**G z7AEUz;nf5!7GUXNBUzvf215#;uiicO{rt4*okmu!g-MY_O<|_1R^%2V^`GRH@M)E= zGEyoTQBx@GO}R2q7~!-JZb;11@w=a276&1Gg9iRlzFb^QWF`Ntt@p>d%oIkpJ>@`*7vB@ zSdq&2L;Eu~mq7hUd~2zZM6Rjd?S;Hg$hqQEV2Z0m*=sQvOsJ#kKDQC&}mU zWSJd7Ssoee%t5V1b8xp7M`Y2qn`~!q>uysUv4&a`$G@XA?EE&6l>58Ip-LGoFOO*B zvvD$Xne<$0{i(xtz_f!{TS0_rj}*mQj|9BoF7@O% z-(r@3Bs%~fmng+Pv7?tS(em{N{-+cT=xQHPs zo8AMI21l)0(Kgh&&_?!&56{yC-T+&;`Um!qPr0TY{uH*<_}6 zBb+2U5A-iXSrQ#=*owAp(T08{fmU%4U=4&7AAy?m2UajyqrHhvc}u*>YLsQSI2c_Y zOWBYT-NqUWM2Pgl4|D_2<>WciF7SfdO{fXZycs87&P*;b4;bU3IaAuH8<@4hZy|;( zn$cWBq_#A-=Q`IIuQy}*Yt3b6(Ab39O_d~u`bC`WMzRl@o_Y> z*+XQ5^W*y@QcFmLDo3?XFHnjU5E|YTu}_(6j@J*8c)g8C4G5VOFKb_*hTu!fL2I9; z2<))lpI@M<;=X?D5{ZuPj)^1pLn+=gLM(~H7%PziYIh+am}@(Rp^6XUEjZy4VRK-8 zZQ9L^lK`Jdab#ex^Sv3uA$bChzFV|4Wp#@qGvRmO>Ev7-{1Gq1A7?(Fyv7zNPo%xd z+{?;>*ignX;ix6vKq-Y@3G~h{2hLRMp&B3NslGM7Ft!d#?QGs9 zIxQ_LK}dvD%E*C31p>5(O}9am?|dC(ZxVElaA=!BIRvkPpw@Slxl4+}mM6wRj$raI z;-*8h%37Ji8yQ{-Tv=jDoQ~e( zq(K~aHeN7DDX-6)5rky}D2#K*j=gjV1&?a^@*z|hBJ=d8xHDM66s~VP<9q0)iU7&S?K?8aJPOHK)hVh zOnU-J(G*5kBWKKS^>lGTmgxrdeetC52!ivhG7<1$z+T`jI{zp#OBFl1xt*;+;nzb= z=#FNgSCT%)(vRT{4h!7QY6pkv=8|$XXObt@0Gnk?-#ct2?d<9i!jAk%sl?H^rM1o& zz@-Ks3I|(6j(#&46-sir<$&Sr9LR8X*0Kv;+{a`j>TYMZm{7da6o}MPJG&iGUccB3 zF-N*X{RW_iQb=-C`y^(WtYluGVvU!vBz2UL5rR9sHmSw}j||9aEaeEmt>`6))L$2O(1d?3w2zWHCSjYz90A*ai3#pbKyk@Fidv zV1l!JKsmq#mopW>%aqWtg4fWv% z*REQ(iIB0}-SyF#4Qpmc>mMQ{k5P5&ekwn#dZ(;a_fJ`+x*QGoQ>X56lye_;eBgLB zll!CEbo(Q**Q(yCI$YIVb)u@b>P*#FRd&9LpUvOHhxo<(N?zi(@UQXj@bB_p@&kNc z^{v%+S1+k5MqsCt2saaIBrsj#7muk9ehHECdDqM41+g%4;$6S4` zuU+MCr(1B(b>=I(c&cVCRTuer-Sb38%MgPxdYx91g4hv%T@ znCG~s&+~=nqUV~YP$&^@6P$t|%n;@Y^M%F2YN0{cB*cYQVXx33>=zCR9|!}&zlB`y zIPXMnsdu_p^}gbL-Mio0?S0?-nfG(=IqxO!uy?dC$5-aN(S}o{-^!V`G4bo*}vESx_`gF)88?p@*PfX;|l%@ Diha&d