From 945a30a7bbbcc5aedf9aa48ca495e52df0b98f8a Mon Sep 17 00:00:00 2001 From: kichik Date: Fri, 8 Nov 2002 16:51:26 +0000 Subject: [PATCH] Doesn't crash if initDialog is called without /NOUNLOAD. git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@1618 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/InstallOptions/Install Options.html | 10 ++- Contrib/InstallOptions/InstallerOptions.cpp | 82 +++++++++++--------- Plugins/InstallOptions.dll | Bin 12288 -> 12288 bytes 3 files changed, 53 insertions(+), 39 deletions(-) diff --git a/Contrib/InstallOptions/Install Options.html b/Contrib/InstallOptions/Install Options.html index 4bc6c8c6..29ab2282 100644 --- a/Contrib/InstallOptions/Install Options.html +++ b/Contrib/InstallOptions/Install Options.html @@ -280,9 +280,15 @@ Here is a little example: CreateFont $2 "Tahoma" 10 700 SendMessage $1 ${WM_SETFONT} $2 0 InstallOptions::show - Goto done + Pop $0 + StrCmp $0 "success" done + StrCmp $0 "back" 0 +2 + Abort + StrCmp $0 "cancel" 0 error + Quit error: - MessageBox MB_OK "IO error: $0" + MessageBox MB_OK|MB_ICONSTOP "IO error: $0" + Quit done:
History: diff --git a/Contrib/InstallOptions/InstallerOptions.cpp b/Contrib/InstallOptions/InstallerOptions.cpp index 9e1ad209..936ae9d2 100644 --- a/Contrib/InstallOptions/InstallerOptions.cpp +++ b/Contrib/InstallOptions/InstallerOptions.cpp @@ -158,6 +158,9 @@ char szBrowseButtonCaption[] = "..."; HWND hConfigWindow = NULL; HWND hMainWindow = NULL; +HWND hCancelButton = NULL; +HWND hNextButton = NULL; +HWND hBackButton = NULL; HINSTANCE m_hInstance = NULL; char *pszFilename = NULL; @@ -668,16 +671,16 @@ static void *lpWndProcOld; static LRESULT CALLBACK ParentWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { + if (message == WM_CLOSE) + { + message = WM_COMMAND; + wParam = IDCANCEL; + } if (message == WM_COMMAND && (LOWORD(wParam) == IDCANCEL || LOWORD(wParam) == IDOK || LOWORD(wParam) == 3)) { PostMessage(hConfigWindow,WM_USER+666,0,LOWORD(wParam)); return 0; } - if (message == WM_CLOSE) - { - PostMessage(hConfigWindow,WM_USER+666,0,IDCANCEL); - return 0; - } return CallWindowProc((long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long))lpWndProcOld,hwnd,message,wParam,lParam); } @@ -760,24 +763,25 @@ int createCfgDlg() cw_vis=IsWindowVisible(childwnd); if (cw_vis) ShowWindow(childwnd,SW_HIDE); - was_cancel_enabled=EnableWindow(GetDlgItem(hMainWindow,IDCANCEL),1); - was_ok_enabled=EnableWindow(GetDlgItem(hMainWindow,IDOK),1); - GetDlgItemText(hMainWindow,IDCANCEL,old_cancel,sizeof(old_cancel)); - if (pszCancelButtonText) SetDlgItemText(hMainWindow,IDCANCEL,pszCancelButtonText); - GetDlgItemText(hMainWindow,IDOK,old_ok,sizeof(old_ok)); - if (pszNextButtonText) SetDlgItemText(hMainWindow,IDOK,pszNextButtonText); - GetDlgItemText(hMainWindow,3,old_back,sizeof(old_back)); - if (pszBackButtonText) SetDlgItemText(hMainWindow,3,pszBackButtonText); + hCancelButton = GetDlgItem(hMainWindow,IDCANCEL); + hNextButton = GetDlgItem(hMainWindow,IDOK); + hBackButton = GetDlgItem(hMainWindow,3); + + was_cancel_enabled=EnableWindow(hCancelButton,1); + was_ok_enabled=EnableWindow(hNextButton,1); + GetWindowText(hCancelButton,old_cancel,sizeof(old_cancel)); + if (pszCancelButtonText) SetWindowText(hCancelButton,pszCancelButtonText); + GetWindowText(hNextButton,old_ok,sizeof(old_ok)); + if (pszNextButtonText) SetWindowText(hNextButton,pszNextButtonText); + GetWindowText(hBackButton,old_back,sizeof(old_back)); + if (pszBackButtonText) SetWindowText(hBackButton,pszBackButtonText); - EnableWindow(GetDlgItem(hMainWindow,3),!bBackDisabled); + EnableWindow(hBackButton,!bBackDisabled); - old_cancel_enabled=!EnableWindow(GetDlgItem(hMainWindow,IDCANCEL),bCancelEnabled); // by ORTIM: 13-August-2002 - old_cancel_visible=IsWindowVisible(GetDlgItem(hMainWindow,IDCANCEL)); // by ORTIM: 13-August-2002 - EnableWindow(GetDlgItem(hMainWindow,IDCANCEL),bCancelEnabled?SW_SHOWNA:SW_HIDE); // by ORTIM: 13-August-2002 - ShowWindow(GetDlgItem(hMainWindow,IDCANCEL),bCancelShow?SW_SHOWNA:SW_HIDE); // by ORTIM: 13-August-2002 - - lpWndProcOld = (void *) SetWindowLong(hMainWindow,GWL_WNDPROC,(long)ParentWndProc); + old_cancel_enabled=!EnableWindow(hCancelButton,bCancelEnabled); // by ORTIM: 13-August-2002 + old_cancel_visible=IsWindowVisible(hCancelButton); // by ORTIM: 13-August-2002 + ShowWindow(hCancelButton,bCancelShow?SW_SHOWNA:SW_HIDE); // by ORTIM: 13-August-2002 // Added by Amir Szekely 22nd July 2002 HFONT hFont = (HFONT)SendMessage(hMainWindow, WM_GETFONT, 0, 0); @@ -898,7 +902,7 @@ int createCfgDlg() break; } - pFields[nIdx].hwnd = CreateWindowEx( + HWND hwCtrl = pFields[nIdx].hwnd = CreateWindowEx( dwExStyle, ClassTable[pFields[nIdx].nType - 1].pszClass, title, @@ -913,24 +917,24 @@ int createCfgDlg() NULL ); - if (pFields[nIdx].hwnd) { + if (hwCtrl) { // Changed by Amir Szekely 22nd July 2002 // Sets the font of IO window to be the same as the main window - SendMessage(pFields[nIdx].hwnd, WM_SETFONT, (WPARAM)hFont, TRUE); + SendMessage(hwCtrl, WM_SETFONT, (WPARAM)hFont, TRUE); // make sure we created the window, then set additional attributes if (pFields[nIdx].nMaxLength > 0) { switch (pFields[nIdx].nType) { case FIELD_TEXT: case FIELD_DIRREQUEST: case FIELD_FILEREQUEST: - SendMessage(pFields[nIdx].hwnd, EM_LIMITTEXT, (WPARAM)pFields[nIdx].nMaxLength, (LPARAM)0); + SendMessage(hwCtrl, EM_LIMITTEXT, (WPARAM)pFields[nIdx].nMaxLength, (LPARAM)0); break; } } if ((pFields[nIdx].nType == FIELD_CHECKBOX) || (pFields[nIdx].nType == FIELD_RADIOBUTTON)) { if (pFields[nIdx].pszState[0] == '1') { - SendMessage(pFields[nIdx].hwnd, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); + SendMessage(hwCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); } } else if ( ((pFields[nIdx].nType == FIELD_COMBOBOX) && (nAddMsg = CB_ADDSTRING)) || @@ -943,7 +947,7 @@ int createCfgDlg() if (*pszEnd == '|') { *pszEnd = '\0'; if (pszEnd > pszStart) { - SendMessage(pFields[nIdx].hwnd, nAddMsg, 0, (LPARAM)pszStart); + SendMessage(hwCtrl, nAddMsg, 0, (LPARAM)pszStart); } // jump to the next item, skip any redundant | characters do { pszEnd++; } while (*pszEnd == '|'); @@ -952,15 +956,15 @@ int createCfgDlg() pszEnd++; } if (pFields[nIdx].pszState) { - int nItem = SendMessage(pFields[nIdx].hwnd, CB_FINDSTRINGEXACT, -1, (LPARAM)pFields[nIdx].pszState); + int nItem = SendMessage(hwCtrl, CB_FINDSTRINGEXACT, -1, (LPARAM)pFields[nIdx].pszState); if (nItem != CB_ERR) { - SendMessage(pFields[nIdx].hwnd, CB_SETCURSEL, nItem, 0); + SendMessage(hwCtrl, CB_SETCURSEL, nItem, 0); } } } else if (pFields[nIdx].nType == FIELD_BITMAP || pFields[nIdx].nType == FIELD_ICON) { WPARAM nImageType = pFields[nIdx].nType == FIELD_BITMAP ? IMAGE_BITMAP : IMAGE_ICON; SendMessage( - pFields[nIdx].hwnd, + hwCtrl, STM_SETIMAGE, nImageType, pFields[nIdx].pszText? @@ -997,8 +1001,10 @@ int createCfgDlg() void showCfgDlg() { + lpWndProcOld = (void *) SetWindowLong(hMainWindow,GWL_WNDPROC,(long)ParentWndProc); + ShowWindow(hConfigWindow, SW_SHOWNA); - SetFocus(GetDlgItem(hMainWindow,IDOK)); + SetFocus(hNextButton); g_done=0; @@ -1016,14 +1022,14 @@ void showCfgDlg() if (lpWndProcOld) SetWindowLong(hMainWindow,GWL_WNDPROC,(long)lpWndProcOld); DestroyWindow(hConfigWindow); - if (was_cancel_enabled) EnableWindow(GetDlgItem(hMainWindow,IDCANCEL),0); - if (was_ok_enabled) EnableWindow(GetDlgItem(hMainWindow,IDOK),0); - SetDlgItemText(hMainWindow,IDCANCEL,old_cancel); - SetDlgItemText(hMainWindow,IDOK,old_ok); - SetDlgItemText(hMainWindow,3,old_back); + if (was_cancel_enabled) EnableWindow(hCancelButton,0); + if (was_ok_enabled) EnableWindow(hNextButton,0); + SetWindowText(hCancelButton,old_cancel); + SetWindowText(hNextButton,old_ok); + SetWindowText(hBackButton,old_back); - EnableWindow(GetDlgItem(hMainWindow,IDCANCEL),old_cancel_enabled); // by ORTIM: 13-August-2002 - ShowWindow(GetDlgItem(hMainWindow,IDCANCEL),old_cancel_visible?SW_SHOWNA:SW_HIDE); // by ORTIM: 13-August-2002 + EnableWindow(hCancelButton,old_cancel_enabled); // by ORTIM: 13-August-2002 + ShowWindow(hCancelButton,old_cancel_visible?SW_SHOWNA:SW_HIDE); // by ORTIM: 13-August-2002 if (pszTitle) SetWindowText(hMainWindow,old_title); @@ -1094,6 +1100,8 @@ extern "C" void __declspec(dllexport) show(HWND hwndParent, int string_size, extern "C" BOOL WINAPI _DllMainCRTStartup(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved) { m_hInstance=(HINSTANCE) hInst; + if (ul_reason_for_call == DLL_THREAD_DETACH || ul_reason_for_call == DLL_PROCESS_DETACH) + DestroyWindow(hConfigWindow); return TRUE; } diff --git a/Plugins/InstallOptions.dll b/Plugins/InstallOptions.dll index 87a049a56d080575686c81bd8b21e5d67c0716b1..1b4631b56949bfa24fbfbef477c5e59be33d4a95 100644 GIT binary patch delta 4547 zcmc&%dvp}l8K2qgZZ^p#yBl^jkSuIqcxV!so!Oy@JKH1@FldC$ix^*EEp%8ZU^*-4 ziP^>32ywC;aAJ*0dstU1Z7EF+t!Wz$8x!PZZ8RZJksj1~&cK3?YEy}%)9=o19(wq* z=XB5c&D`((&As3K?%m+J;JQ7*`>3YZtZl$E69hXYJ8q% zdy2GILu*N(_vYuOE#}v6=RxR_-o+Q<4(S>^|0d;YR%^ymx|=jtaC}f&t1Vl2n8eJ% zmSQZt{IHidD7LqOj_VcM33#{0_$fH;6!Lp@N%tRjO(Xcj4*lta2E~u^b zWhq<1x(A|xRFd@h_^|YQJz+VR;DEluXMskqbXi}>B0r|xPeE|egKXL=2y4QtSO+8f z0pOL1o6=b?=Us-GIr2_br%)M+40hL~I`CBVy$W+sdfYGvBE4X6%tAibgdbH}M@{W} zVaCGN(T2W{Qbf<7G-ROeMJbC_>5jHahtPMqtuiMWuPU8rt0X3gytc|bu`DSRp627(ETP1YZUDSiJ2RtCqM&o zfTs`RTn1#N3?&#*lr?a_h8dhh^=JcF7NVPR)+MS;Q6Q_;!UDSHzx@(FO zMbj1;mb%jy7obHE28`S=m^R28p?vDObts{uS&&d;VhY zMO!CD(pBSn2TIJJ`c{R$7?00Zc)}X4(7RwCIk*#OO)90P%muJ_U&yq>{&*vkNJmTT zez#>gtj;Hy{32AEtta`y2&&1}m|xe^3B@DYP(cZ&v^Cyp#SeYtptK`v9?nUxX3fW6 zkxpmT2I%u^8r=PD_CmBL?V;6}xz=xy=jt&GR_-hCaY+Yb?h1@*y^1YFf>$O8Pj`QG zJ81hCabr+r3eyRZl#vN;cCGw(o$6y4`RIdjWEZHr`%R(OfDkb>`k5|(VM0s`R;cDp zp)iPo#h57+f`R-Qlx!$w3T*>IVNf*1)|?3KfOPrH+6nG<;QBNZN%-*SK9o%|Ctpf* z|1?r$c%+Rh3@8Q6(N~ac1Z)WKsW7VQh**SL(oqb0S_5~_DkMNIqd6;KcqY;dV|PEF z=}oYq6@zvIw+E$|@Ng!Ac7IYw^_kRhAP)DeRKiTo5s z3x$vjHzC%fbUYZ3PFoSRO|UC^`KIi@}_7J#&ylr!nnSrTo_MlSt5+5^Vtx=?-?y; zH2n91RfNS5C&g;lj*l=cRMtC&zRT%pb%a^0)=I`1v+~9Ji83G57W(J{7>lyR`FSd6@hC$5Ly2SUvb&7IZiBV~LE0mOYaJoo#sP zE2>UuTThxoFM;=JpTgaPie4EJzJ@P*3V17gn3r3H0{Vrq6kaEcY5YH-V=xvirsra< z??LI9`2w+=C@9ZsjkRb*SuA%Hl;^19b3T|xG%3BR)r@xw3?h(-LGojIioO0k}Pa>6D3v<%C?HD zgkB513l0{k$(C)dl@~%ZXm7pHn&O$YQirWGAY93-tzRQD`(P0pxOD_9<@JdMBHGpd zVo11*?m>~@R8H*bUN8_no$#cuwiPXcoa*Z#YEC^w>;Nu|A-Gyj%30{l1xbdQH)6~} zi~wlw0d1f&5(>6SUq^wK+bm zKG_4#mK34pr83ma&x#D{T8Zu!NHmI(=`C!8o7StK<*1D&p?5ZdTFrO5%uq>@x;&ZF zS7xN7NbS|>KA1kWd%(;gHF@9)+=Q6JX!yq~0W|JG<3lPNHCQ>S4pASKJJsO;8irvg z4CFwQESf5k-8*4P6ITRu`E~Wl8$c~l@ap|GaV6Hut8c_M%7Nk=@y&Anjo1b`eS$3v zSifDYkHd#3%pgkilQ_Bx6~bjCv3!kb~-2CF%B}M4G?Xdy@N40S|oI_sO4VsN> zAAI0GVIZ#`TAiWC0vkmbgNuPrBMvskwPF=vbPxKAHVD@=yb+!_uZL%fKiBj|pBFBN zFTzW)GMz>j7tOXlnQ6k*>|e)<2qylnPHdyEFGO$L}jRKB@?kPl>?zVZYB&VQPfxY zROsXe%x|1XY!}(Bopl|T_G?xLF1j#m6o7t}6o%CSe1Kg57SILg1q=gZz+ylLzyUx% zAN<=20xAGC0Q762G3*&YC*W6r7+^EtBfvia28fpfSm43}STPJ%0M-CD0GVG?T-M7sC43}0pR!N5(_s$DyYS;4( z8#n)O%eJa5n}1Y}VY%3{hc<0Wu)IxM9xj(s^DpcrwI%T9+k+-+6eb2$CEPw#oCEqF zfX@N_1cq7W!~YsU+ENTN19H3Vb3aB^NWM-yofe3@zjBYcQ`j`t!p>x8vkTcGmSM}- z73^JX4f_E5FuRf6!am0CV0W@%R$^adUuA#IcC$y=W9(^mh`qpm%*yOl_8S)Wq{;nq?Wy;y^ZeNJtf$lS3(q0XpFBrBr#;_z^xq%5@_=Q0gwd zqxA05ACxwgZZCbg^gtn+%bA$mhvk@)&uF93ej-W%5&Ul)O%AoCc@G znd4mQT<*Nj$vdBLwmLhU`<%aY{?>WaIpF+@^MdnZXWaRv^BX5d8K^AEO65_vQVg|% zYM?eyn<$#weJt`A+8U0=9vX6(!YW(iX~lPP7Yn6=D$W;3&mX<=ge=IZf1m$ K97`_3I{z03F_~*)FZq-2;(c)>$TDpH00_q3#=ojhkV` zdQCT)2fj!Xxu|qn=XeCCEY@aPdTK1fz~!EryhOa(Olwb#HN_P4)D(!7385gT^|&%E zVixvY)uX%?3YTjjMDNoGq2#!9%9S6cVYe0u#1@C|n43fN@0;P`3ynC=}cf_!%C=C`)9T~W&cFPSn5enmF z3k^!UGiS}jn<7N@{24H9mRq5G8u=ACp=<*r)DmC99#^(06qWQ73LpMFTY+n>dHnVV zz$Al|=YvsPkFUgDdeqsn4m*+$4<{u@)z%Y=%$2Q{^Wp}QcS6z6a4L=bevm;BeF(G2 ztJNcOJh3~=um_u?)2W0?QVaClhmhT;!!BSE|M*Xh})h|HH;qkP@v) ziKMIgRTi9>Fa3y1TSmsFAg|Tb>(bJ2jx78j-jkQ4wOP~P?7o~;2WqFHnX?7p;mV|Ikc1L`g{;g0vqIo~C!f|z-dol7sAK4?V&%TdrlitXlO1>?9 zkX`R@YNn9$Xb)F{&mCJ^0KK4cxqw>xP)LL_NvDso3J(YlY1y1M&-q9j}VlVR1?Ksjhp(7L#x*z2k1-R)#;h2qRiU5Pu{HBbmPR0}sL|mMx4-Fmwyx;6MQ9(5e@QV&#GR39l2k!dZb;1mV2= zi@bO)%C|zD2j42q$|uIz>Od#a;k_9b4^=OSQymX@3D)((4MIqN0AsnB1~ zuLb=vIVC=MVkU91I&i<;H_=1Dz4-08b*Xe}?$p@E4{swxT`e!&0lVZa=JDq8Zrmf{ zUBDdwCc)Aq(hs{6-&H%5ZY^H}Jsi#-zOaCAaLa8FPKX+*NNj4OJRKP5q5Gl##j=_u z&b-y%C|+6Lsn5a7Ty6B_t>#pOSHGGg39oiFmqz%e8umrpF`dw2X76lyhm`0+PoL8VTV_L4BiGio0P`vj@bu0@0Aj;fC!Y{fUX3 zgQTN?h=n`hN!{pSiecVOO)!bPCXnp_6vi;OxP#Mhq0CGG%E`sRq&Q&S4$8nzNU+<0 zEm!<`-zjJCed5!|$FCt2>T~;{M;yUDa9poRPH(GXiMzB|h`YBpyD8OvA>-5K4DQhw zO*UJMiVW_|i7uX)-`Vkf`YfMl$Nt16g&5pB$2kw-{+Vo@VjdDgQk(_bWfoq|h zQLdp(ywb|;G=vmYc{m0ic?`aj<*Uk2`BMDCuZ;2KBA-)+`2LVjC_{Wj$OAAGqIp!L zoVin|o1TS2ihup!BBuxBS3vE*N?$DtKLqRLwiN7FPH+6A80E$kJ_gpwbCa+THH|+o z>tIrd!A)7t2c;%?ADp209=Ei3)B6kHqc)aX&frgpeiJb86{3fiTRsAcEz6f_A6qI! z3l2#+`BeS}3>}i+`VJweo*QnN!@#B7QOS_cH<>H1d#_c1Bj&wKd}%7%YfQ|x_~wUZ3B7- z=zXA5Kz|3i4%7w?Rshuj7_bZ*17=Ok5F2{{I||5+!_5k}Ac8L9q{gRd0?^%*Fa{1g8ZW>p@ zIXIT9;^uRUxTV}rIG$U_`MGYck9(Cn$PIF5xzD)E+%@hNH*@Zsxg`}<6-^Z@Dpva| z+A7*Bx+dy##%-D$6~ z&$BPE*V|j{%k8}VNqet-n|+u41N%qz3-*}(pLW8bb=>8c?65jkIy{apN6;ZTUUj_T z_?_eTj{T0Pn{7|KaiQS+z;R6VtfYNfoCp9)eNDT(?G^*Z$y zwTpU>ic)8&zfv;w4RxIwq13dVzMH<6E~U%p2kClx3B8i`($CN$y_tTU-bw#~K0u$O zKcPRTWAtrW!(=hJOg`ga%9twVA*P;rgb6Sk3Yiy}txSm7$?RnYnGczB%thvF<~pOA MGZpqpDwuuo-)<5&+W-In