From 466e93ea1168c9859e45ca460b321bf43a13830c Mon Sep 17 00:00:00 2001 From: kichik Date: Mon, 29 Dec 2003 15:12:41 +0000 Subject: [PATCH] - made NSIS ignore WM_COMMAND from disabled controls - made NSISdl set the cancel button as the default button git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3330 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/InstallOptions/InstallerOptions.cpp | 4 ++ Contrib/NSISdl/nsisdl.cpp | 11 ++- Plugins/InstallOptions.dll | Bin 12288 -> 12288 bytes Plugins/nsisdl.dll | Bin 13312 -> 13312 bytes Source/exehead/Ui.c | 71 ++++++++++---------- 5 files changed, 47 insertions(+), 39 deletions(-) diff --git a/Contrib/InstallOptions/InstallerOptions.cpp b/Contrib/InstallOptions/InstallerOptions.cpp index d9291c9a..7669cd00 100644 --- a/Contrib/InstallOptions/InstallerOptions.cpp +++ b/Contrib/InstallOptions/InstallerOptions.cpp @@ -644,7 +644,11 @@ LRESULT WINAPI WMCommandProc(HWND hWnd, UINT id, HWND hwndCtl, UINT codeNotify) if (pField->nFlags & FLAG_NOTIFY) { // Remember which control was activated then pretend the user clicked Next g_NotifyField = nIdx + 1; + // the next button must be enabled or nsis will ignore WM_COMMAND + BOOL bWasDisabled = EnableWindow(hNextButton, TRUE); FORWARD_WM_COMMAND(hMainWindow, IDOK, hNextButton, codeNotify, mySendMessage); + if (bWasDisabled) + EnableWindow(hNextButton, FALSE); } } break; diff --git a/Contrib/NSISdl/nsisdl.cpp b/Contrib/NSISdl/nsisdl.cpp index 0bc67e89..f7ffb036 100644 --- a/Contrib/NSISdl/nsisdl.cpp +++ b/Contrib/NSISdl/nsisdl.cpp @@ -233,8 +233,6 @@ __declspec(dllexport) void download (HWND parent, if (IsWindowVisible(hwndB)) ShowWindow(hwndB,SW_HIDE); else hwndB=NULL; - wasen=EnableWindow(GetDlgItem(parent,IDCANCEL),1); - lpWndProcOld = (void *)SetWindowLong(parent,GWL_WNDPROC,(long)ParentWndProc); dlg = CreateDialog((HINSTANCE)hModule, @@ -307,6 +305,13 @@ __declspec(dllexport) void download (HWND parent, SendDlgItemMessage(dlg, pbid, WM_SETFONT, hFont, 0); SendDlgItemMessage(dlg, IDC_STATIC2, WM_SETFONT, hFont, 0); } + + // enable the cancel button + wasen=EnableWindow(GetDlgItem(parent,IDCANCEL),TRUE); + SendMessage(parent, DM_SETDEFID, IDCANCEL, 0); + // remove the BS_DEFPUSHBUTTON style from IDOK + SendMessage(GetDlgItem(parent, IDOK), BM_SETSTYLE, BS_PUSHBUTTON, TRUE); + SetFocus(GetDlgItem(parent,IDCANCEL)); } { WSADATA wsaData; @@ -385,7 +390,7 @@ __declspec(dllexport) void download (HWND parent, SetWindowPos(childwnd,0,0,0,orig_childRc.right-orig_childRc.left,orig_childRc.bottom-orig_childRc.top,SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOMOVE); - if (wasen) EnableWindow(GetDlgItem(parent,IDCANCEL),0); + if (wasen) EnableWindow(GetDlgItem(parent,IDCANCEL),FALSE); } if ( !error ) error = "cancel"; diff --git a/Plugins/InstallOptions.dll b/Plugins/InstallOptions.dll index 93dcc54af86b9175cf69496b87ba3f3b87fd0a4f..c139277f86842d613aa2d00fd3dda68354c14e8b 100644 GIT binary patch delta 1856 zcmd6li&Io}6vuzRmEzI1dzaZoP&6I}m`W_adoTOCch|>~uZjU-9bb^o^`iOO)gBZW zO9QQ#`g6*}My19{Q-@qjCrwv#5R++`Bt^^DIK@rS0aIks@z>e4KcYMHnRD*>o!`0N zbIz@)sHxc0ksjyjbE5yA8%US_9DWv|WC(~)gAX?MzpIHELN{v&-Ho$xH$8`U;(ei| zn!MPd>kSCig&PWu`oNzUp%QPs3vp^CZHXU_TWNdzMqEH=Cv3;%bReN^YMF;H>w89h zU4{lB=GUr~gNy~c?AP@hIEd_SUxK(s?QgYJZN?Zso(66s-xe%1)~a#(KqAzi?8~TC zWAt^OQ=K*$2WYld96!H^nOu2ru?lHC>ZcDG^AstJFt#?X!L9Xpm?NY~&oQPLC z=qV1mjg6(9#lbjGL7TM0B33PhyYz%MA9vDz?U8AnkUUT*VxKc8bb+s6CTs@|QmCTxJPx?zB^I_67IAP`As7t80-3(x21n&2Q1_Q#NLPr1s`c-;ux zPP26u+(9dJ#p6DEz}R0H>IB`~DU~bIA8~Wc532ofYU^V-y9N6Q&NZ?%F{+DR*Nwx+ z>GS$D9HzPY%EU9#9{Utc5qx)zk(t`)*ZQ>hDhLM$J?b>tsdwSGsENxg^FgdG>~p|8 zR)R~yt{%67JYF0V>7hQ-L*L(wDOf??`|!<3-;vIkDFEq3>IFCiVayNmw4jcybum*r z-N>ynxnY8JVSQi${6b9VfJ;FkK#c|oMp|re<1V_*Am{9YGG9zuj5v=+F_)-|@4?Ev z^}`TXqAX&W+mpluoYsU%HOHv{U^AmA2da^ zGt;Kf^2GNwcmwSVB@FcT=-C?YD5cXQ6;1ZA8cZbeR%EagC`lQKXJ?LpD zoYZ4bmcaB)qu>>W+ZQ$dLGNl$DrEY)RNM&pil$#J>CI2J~=z~7Ni76?4m1@ zKg5}IAbIk*Z*E5>vOluTJyEwM;xu6<4M*93nU~P;#D{8fBany3^ z)ToV9C(wf_V{lUFN=kxeOX|w%*LZ|x0bald1OOM%4732JfuDdYz-<5t2tnrRr-1Cd+Wki4?Z}bmnBgdQtaj8pHahk?PC9;ebUJQ2dK|IRXz68X zl2j&DNQa5V`@2yp(q>`J?88Af8^iKf0S<^!^mjDlj;fN6*8U7AQfa0Sw;e6GifG!$UbtA93tP5?@2r9 zBsWPnc}O0UXLyd!;|0EqpTjTYm-9Zpn*WI3!f)qy@q76F{2@NfpXYz)@9>X#jgTND z37Nte!7LOAPT^IdRHzUtg|)(ZAt>w+x`b|_Pk1B>8ZklCi%DXx$cvI#D84S1iSLLt kVuQFvY!aKrgW@Uitk@x57H^2XA`^85#)5)SFn1OH7rAqp5C8xG delta 1871 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 IO}!@k2VzaRnE(I) delta 3154 zcmdT`|5H@g6@PDmu;9vWEDOjN`DPJ=UkJF%F8fUro-!Gw8&)BxTeTJ4tY1pvZomeF z5iqV#4CI;=jZLsJk<3^{A&u>*K|#SxJ5VP9tF$u8505|%j$2$Sq6 zb3f;t`_4J{+%vDrQRS#N@;wcvoctpbF$;Z-xzBMVHxld9<5zR%;<@|wm$|8U{_ym( z+y!{vxOvR~%zyir4(7v6|EvPXt>lBamh4*%_jZINXgF>IR9;fVuj9Q9i7}*)m&>~1 z$t^yGuOz&zl<#ZXE&G5c^}On%Kr0_X-VD^q?#*cv1Jyjgn;Z{X#GfI3L1}y`nGE`= z%oj_NUrJfLIF93}TfW7!{1qt@vS;~%4L@IZ{fe9`5Fdyy)pnH6a>}eyG&9pmGfCM? zgEQC0a-8U^rqmrI<&sUoxnV&sFb`wM*TE}hHODZcTB@x11aViWq$5Nnw}n}zX_ux# zA?e6F@^|&|Cq=_Qu!_9)sO^UAo(G$hd!CjakU+;Po+@uc}UINtym(2we0bp zsyd9?=zDT$D2gq^AuFWsqR5KSIQ}bA9GVyVF%;EZ3d5Z}kz!|Bw^huU8y?^*WOlzM zy`henm!}Qfii&ViP^4W8cxa`i@&d^h*_J<}AuzHfol{{4n(0Vb#;MlOfq<)4s%~lf zxAK~dpWk+Q)>9epY3op*;`t`BBXSYnOpZkw;#)oTF^_%NW1sZc$36B_-NI118-=y| zJa(^CNG2i^S8GB!&T+nyQ%Pw|YOz5|WKwG(q(~+WeF$kLlX|Kl1u*IS`;Z=oK)U$> zq#q&G)s{V?)GFNzA={#kRt|&m2t!5B=&UJ|C(I-bvd!j{*_=Gopd2`urAR4V)$U zCh35varybFWq+N};phAPrDmq;#&j|qoxzuo$e3(p35=(6oP>&OjLDkGIO_H%G{wMn zFeZiHP6A?+g4rpHrY5o=Ha*iHyJ&KNvO3e@!{TL8;J6gdbR-D5u2y=0#&YmH$4N?Z zJ9d8Y8MIWL5H6ZH=2<5U0w|E<6xst7McGjE9y(Cl;V!GLPzAc*)!PSMJKzE>hf*>7 z0ys3m;hAL~EO~dXqY+$z6yPP>;^HEP(TYWe&LWp=f0U!%Z>^Ae$!BrNAvnn#PeqG# zne@aZRQBGdXl)g18zMon=yF7Qtp)+kpCVKm% zD}6K?3W|iOdLy|1F4kk=Jhvn#Rw#mt}t}F zlSLt1FDNP$-GX-|vKV;-Do+LGjyDI()guP1k)pH|g93G*gH~Uq64wj`d~4`YR>wgL z(^Tg9^0Z|HEV1)qn=-fnv{SK<4#j80u)& zBaa^YTV4`794G+qhA1LBZ$md%~ zPeN>lRB(yC-9LH@s5%N;1zbZfuxnG@6+Rl|SL2QBa!7WhKw=Z;RI-CJbSgjm%~KTj zdF3xF_uZcKSH2N-8tI*qtC-vg8S~YJ`Q@KuY{*SbIK6$?HNz=qGtxgX_4cu;_4EW4 zg=S|&nsCf23QcJkAU2y#qx41%Dd20^9&3zzYQ8T@gUa5^fQvgOCSo1WJHCKt0d|oCeC^-~iSG2gupEEAkw# zPHoTr^T4XoIj;Q$t^;1U^W0l6a8JQuxos!3sbMsQe zC~qw;-nOcE*RD-liN#Y}u}@VCd#=X{*Oo&o z`H_pY6?hA1N#?lTMI5&katSG(|0(-iJ@-m?b)vE=IplYzh`^1qYOEf zhHZuehI&Jz;jE$0@Hd0f7-L*$v=~c``;4No!PsOxX*_HEgYlyAnz7G#*EnH}H>H^j zrsbvr(-zZS6EPh%ePL=hT{QjG#G4b$I%pPrQPx;OGjH`#vT4Yrij96 diff --git a/Source/exehead/Ui.c b/Source/exehead/Ui.c index 13896f57..e9c02668 100644 --- a/Source/exehead/Ui.c +++ b/Source/exehead/Ui.c @@ -96,43 +96,39 @@ static BOOL NSISCALL SetDlgItemTextFromLang_(HWND dlg, int id, int lid) { #ifdef NSIS_CONFIG_ENHANCEDUI_SUPPORT #define HandleStaticBkColor() _HandleStaticBkColor(uMsg, wParam, lParam) -static BOOL NSISCALL _HandleStaticBkColor(UINT uMsg, WPARAM wParam, LPARAM lParam) { - switch (uMsg) { - case WM_CTLCOLORSTATIC: - case WM_CTLCOLOREDIT: - case WM_CTLCOLORDLG: - case WM_CTLCOLORBTN: - { - ctlcolors *c = (ctlcolors *)GetWindowLong((HWND)lParam, GWL_USERDATA); +static BOOL NSISCALL _HandleStaticBkColor(UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + if ((uMsg - WM_CTLCOLOREDIT) <= (WM_CTLCOLORSTATIC - WM_CTLCOLOREDIT)) + { + ctlcolors *c = (ctlcolors *)GetWindowLong((HWND)lParam, GWL_USERDATA); - if (c) { - COLORREF text; - LOGBRUSH lh; + if (c) { + COLORREF text; + LOGBRUSH lh; - text = c->text; - if (c->flags & CC_TEXT_SYS) - text = GetSysColor(text); - if (c->flags & CC_TEXT) - SetTextColor((HDC)wParam, text); + text = c->text; + if (c->flags & CC_TEXT_SYS) + text = GetSysColor(text); + if (c->flags & CC_TEXT) + SetTextColor((HDC)wParam, text); - SetBkMode((HDC)wParam, c->bkmode); + SetBkMode((HDC)wParam, c->bkmode); - lh.lbColor = c->bkc; - if (c->flags & CC_BK_SYS) - lh.lbColor = GetSysColor(lh.lbColor); - if (c->flags & CC_BK) - SetBkColor((HDC)wParam, lh.lbColor); + lh.lbColor = c->bkc; + if (c->flags & CC_BK_SYS) + lh.lbColor = GetSysColor(lh.lbColor); + if (c->flags & CC_BK) + SetBkColor((HDC)wParam, lh.lbColor); - if (c->flags & CC_BKB) - { - lh.lbStyle = c->lbStyle; - if (c->bkb) - DeleteObject(c->bkb); - c->bkb = CreateBrushIndirect(&lh); - } - - return (BOOL)c->bkb; + if (c->flags & CC_BKB) + { + lh.lbStyle = c->lbStyle; + if (c->bkb) + DeleteObject(c->bkb); + c->bkb = CreateBrushIndirect(&lh); } + + return (BOOL)c->bkb; } } return 0; @@ -553,7 +549,7 @@ skipPage: } if (uMsg == WM_CLOSE && m_page == g_blocks[NB_PAGES].num - 1) { - if (!IsWindowEnabled(m_hwndCancel) && IsWindowEnabled(m_hwndOK)) + if (!IsWindowEnabled(m_hwndCancel)) { uMsg = WM_COMMAND; wParam = IDOK; @@ -561,7 +557,10 @@ skipPage: } if (uMsg == WM_COMMAND) { - int id=LOWORD(wParam); + int id = LOWORD(wParam); + HWND hCtl = GetDlgItem(hwndDlg, id); + if (hCtl && !IsWindowEnabled(hCtl)) + return 0; if (id == IDOK) { @@ -596,7 +595,7 @@ skipPage: { // Forward WM_COMMANDs to inner dialogs, can be custom ones. // Without this, enter on buttons in inner dialogs won't work. - SendMessage(m_curwnd, uMsg, wParam, lParam); + SendMessage(m_curwnd, WM_COMMAND, wParam, lParam); } } return HandleStaticBkColor(); @@ -700,8 +699,8 @@ static BOOL CALLBACK LicenseProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM { if (msgfilter->msg==WM_KEYDOWN) { - if (msgfilter->wParam==VK_RETURN && IsWindowEnabled(m_hwndOK)) { - outernotify(1); + if (msgfilter->wParam==VK_RETURN) { + SendMessage(g_hwnd, WM_COMMAND, IDOK, 0); } if (msgfilter->wParam==VK_ESCAPE) { SendMessage(g_hwnd, WM_CLOSE, 0, 0);