From 7cf2ae31608dc98fd896ae37171a29d18b4c52cc Mon Sep 17 00:00:00 2001 From: ramon18 Date: Sun, 10 Oct 2004 00:53:04 +0000 Subject: [PATCH] #1042367 - Banner fixed for bug 1022399 now hangs, code simplified on banner destroy git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3697 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/Banner/Banner.c | 34 +++++++++++++++++++++------------- Plugins/Banner.dll | Bin 4096 -> 4096 bytes 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/Contrib/Banner/Banner.c b/Contrib/Banner/Banner.c index 2baf3319..7e52c88d 100644 --- a/Contrib/Banner/Banner.c +++ b/Contrib/Banner/Banner.c @@ -73,19 +73,17 @@ DWORD WINAPI BannerThread(LPVOID lpParameter) return 0; } - SetForegroundWindow(lhwBanner); - while (IsWindow(lhwBanner)) { - if (PeekMessage(&msg, lhwBanner, 0, 0, PM_REMOVE)) - { - DispatchMessage(&msg); - } - else - { - hwBanner = lhwBanner; - WaitMessage(); - } + if (PeekMessage(&msg, lhwBanner, 0, 0, PM_REMOVE)) + { + DispatchMessage(&msg); + } + else + { + hwBanner = lhwBanner; + WaitMessage(); + } } hwBanner = NULL; @@ -99,6 +97,7 @@ void __declspec(dllexport) show(HWND hwndParent, int string_size, char *variable { DWORD dwThreadId; + DWORD dwMainThreadId = GetCurrentThreadId();; hwBanner = NULL; @@ -117,7 +116,14 @@ void __declspec(dllexport) show(HWND hwndParent, int string_size, char *variable CloseHandle(hThread); - ShowWindow(hwBanner, SW_SHOW); + if (AttachThreadInput(dwMainThreadId, dwThreadId, TRUE)) + { + // Activates and displays a window + ShowWindow(hwBanner, SW_SHOW); + AttachThreadInput(dwMainThreadId, dwThreadId, FALSE); + } + else + ShowWindow(hwBanner, SW_SHOW); } } @@ -134,6 +140,8 @@ void __declspec(dllexport) destroy(HWND hwndParent, int string_size, char *varia PostMessage(hwBanner, WM_CLOSE, 0, 0); + // The code below is not needed I think +/* if (!hwndParent) { // reset the thread that called banner::Show to be the foreground thread. @@ -158,7 +166,7 @@ void __declspec(dllexport) destroy(HWND hwndParent, int string_size, char *varia SetForegroundWindow(hwTemp); DestroyWindow(hwTemp); } - +*/ // Wait for the thread to finish while (hwBanner) Sleep(25); diff --git a/Plugins/Banner.dll b/Plugins/Banner.dll index 3488fe0e0f1ae35a7d4ff9cc23b4632c74d95aef..476ca932193607e1df5de7c0ba21c38983ce37f8 100644 GIT binary patch delta 891 zcmb`F?@Lor7{||5*S&Ne!P)hb$jl${)5itbI&=?_j}IsJeQl0 z64KP`l9rqC=_LnVn*MSfCs@qnW%uwtT*>C}HN2Sjn>MiHh=jyh3x`nAn+Ui(NJQ%4 z@cJY|D7^lRwQ`Nv%SJfqkOzE1A|!7_H2XnV7rFGPOGu8oL{Tk;m>XgZg}$@%BFggY zC0B=e_KEADt&w!#r0zc;?a^FSx^Mn!me4Dg_O_bMWSXu$}XAf$2)Tz z)RGQX=6GWk!;zc-E6rXFZcXJIwDd|Uuyv%{xK1rejq#bFkP1j}Q78hY_-_%35vZ;b z962|Hiw?hWNUiZ3Hnl>wYIYIitS&dbQdglO!3Tk~uM6HX)>NTWdoPD)xF3o53_(M}% zLZ*#_ytNR`8V#eA#aN^~(RmJK^*$l9BqMl4aGnQek(X<>YEK$HA@%!0ntio6@N>qO z{$fL>y1RUB@TwD`2|ynYVSWM>fMs9}*aW!U2vq}azzduPx`E5U4d6D5@wQ!4;6xHa zZ-IZ~KB#VK+FAAgQklzoY{zi>fO1?N9v&D}y5hqFu?weIZ`mC4T3xnns6|m?{qeu? z!68*)5o_kRKS!f3)twd7JPJvji^ZM1&H|ynSz1BWWjRNH6Ip zLu8U<$P9Tv9+Rh}K;DpL@`0?9&*UfBB$$@cozzJ^w28LRHrhd>^dh}NM`()Pp)>Rm R&C^-BK;O|7nva<#@E<99_Ll$v delta 975 zcmb_b?@JS59Di=!<{U?yKQ6SKopqv+!JcO`9X7CRmVq&t-5KgsaB}LSC)G+la=``$6RtJyRITMXg+7WgMHpC*OR@@p# z2#H(k>LvO-Wm6x}{JCoIW5OPJN7A?|kkfQ5BruVXz_Lm%Z~}1lRM*V~7A079i7um9 z^%vbT)+~t{cNL5=*JVBItW0^mlkQE?qj3#DjHiMOsGwcY%}lgLa3EIW>Od2}(P2M=4q%#TX>Wi7MtvH)Q4^ zjYkg*?6Z&^8Y=>q*(#vZR%f=bQsT_IDfzNR<5(~!baVZZ@&j6AK$nf$VT&Hne4UHp zJP$<=$N&Nn^0t8~@}3d5#td+hzQu@3Zx98Y3B6@8k}`Yb28}BPH?1Z+MMet>%w!V{ zRf>U4WCub~Q&x!Dd@y)IKL*LJ)h`FTB}rz%wHsWWA;GL%5hbmrTDMCw1&=0c0jNCX z3=~7b0Ik2mKxkYCgv2t3mjau9alW)!E;$(2>C&qxnJ)E%=@fNW{cZaD)LiQBD~DiM z6R=MMUI5+#)&M^Ny8y#!gbDy<00-b2pba1ch5+ydnhQ^ifG6S+S^*rbX|M`>y!`n8 zD`m`USBLWEInm(t2b%^4{kI1Pl>T1nPJi#fuxhtdsC||)wi`7L`g?-@1KNFGov>6J z5rY3lePb!l8!bSn5b!X$VL3yYysZ~on;Vn)Ooocva%ol{$#|@yqZYgHb=-k_v5bfD z6Fh?x_&I)w=kPLK$6xSwyoq=5AH0uEgdrR`NqAC8>PQ1=AzpHe1js!SB9F;4@`}7B VDY8mFlW$~$?2@kc`{{VUH4|V_m