[PATCH 18/21] [WinHelp]: now storing reference to the popup (if any) as a WINHELP_WINDOW pointer

Eric Pouech eric.pouech at orange.fr
Mon Apr 21 14:08:35 CDT 2008




A+
---

 programs/winhelp/winhelp.c |   34 ++++++++++++++++++++++------------
 programs/winhelp/winhelp.h |    2 +-
 2 files changed, 23 insertions(+), 13 deletions(-)


diff --git a/programs/winhelp/winhelp.c b/programs/winhelp/winhelp.c
index 4af5a67..7705a65 100644
--- a/programs/winhelp/winhelp.c
+++ b/programs/winhelp/winhelp.c
@@ -56,7 +56,7 @@ static void    WINHELP_DeleteButtons(WINHELP_WINDOW*);
 static void    WINHELP_SetupText(HWND hWnd, ULONG relative);
 static WINHELP_LINE_PART* WINHELP_IsOverLink(WINHELP_WINDOW*, WPARAM, LPARAM);
 
-WINHELP_GLOBALS Globals = {3, NULL, NULL, TRUE, NULL, NULL, NULL, NULL, {{{NULL,NULL}},0}};
+WINHELP_GLOBALS Globals = {3, NULL, TRUE, NULL, NULL, NULL, NULL, NULL, {{{NULL,NULL}},0}};
 
 #define CTL_ID_BUTTON   0x700
 #define CTL_ID_TEXT     0x701
@@ -591,7 +591,9 @@ BOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE* wpage, int nCmdShow, BOOL remembe
         WINHELP_RememberPage(win, wpage);
     }
 
-    if (!bPopup)
+    if (bPopup)
+        Globals.active_popup = win;
+    else
         Globals.active_win = win;
 
     /* Initialize default pushbuttons */
@@ -647,7 +649,6 @@ BOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE* wpage, int nCmdShow, BOOL remembe
     }
 
     WINHELP_LayoutMainWindow(win);
-    if (bPopup) Globals.hPopupWnd = win->hMainWnd;
 
     ShowWindow(win->hMainWnd, nCmdShow);
     UpdateWindow(win->hMainWnd);
@@ -734,9 +735,9 @@ static LRESULT CALLBACK WINHELP_MainWndProc(HWND hWnd, UINT msg, WPARAM wParam,
             break;
 	}
         break;
-    case WM_DESTROY:
-        if (Globals.hPopupWnd) DestroyWindow(Globals.hPopupWnd);
-        break;
+/* EPP     case WM_DESTROY: */
+/* EPP         if (Globals.hPopupWnd) DestroyWindow(Globals.hPopupWnd); */
+/* EPP         break; */
     case WM_COPYDATA:
         return WINHELP_HandleCommand((HWND)wParam, lParam);
 
@@ -787,7 +788,6 @@ static LRESULT CALLBACK WINHELP_MainWndProc(HWND hWnd, UINT msg, WPARAM wParam,
         {
             BOOL bExit;
             win = (WINHELP_WINDOW*) GetWindowLongPtr(hWnd, 0);
-            if (hWnd == Globals.hPopupWnd) Globals.hPopupWnd = 0;
             bExit = (Globals.wVersion >= 4 && !lstrcmpi(win->lpszName, "main"));
             WINHELP_DeleteWindow(win);
 
@@ -1170,8 +1170,12 @@ static LRESULT CALLBACK WINHELP_TextWndProc(HWND hWnd, UINT msg, WPARAM wParam,
     case WM_LBUTTONDOWN:
         win = (WINHELP_WINDOW*) GetWindowLongPtr(hWnd, 0);
 
-        hPopupWnd = Globals.hPopupWnd;
-        Globals.hPopupWnd = 0;
+        if (Globals.active_popup)
+        {
+            hPopupWnd = Globals.active_popup->hMainWnd;
+            Globals.active_popup = NULL;
+        }
+        else hPopupWnd = NULL;
 
         part = WINHELP_IsOverLink(win, wParam, lParam);
         if (part)
@@ -1737,7 +1741,9 @@ static BOOL WINHELP_SplitLines(HWND hWnd, LPSIZE newsize)
  */
 static void WINHELP_CheckPopup(UINT msg)
 {
-    if (!Globals.hPopupWnd) return;
+    HWND        hPopup;
+
+    if (!Globals.active_popup) return;
 
     switch (msg)
     {
@@ -1748,8 +1754,9 @@ static void WINHELP_CheckPopup(UINT msg)
     case WM_NCLBUTTONDOWN:
     case WM_NCMBUTTONDOWN:
     case WM_NCRBUTTONDOWN:
-        DestroyWindow(Globals.hPopupWnd);
-        Globals.hPopupWnd = 0;
+        hPopup = Globals.active_popup->hMainWnd;
+        Globals.active_popup = NULL;
+        DestroyWindow(hPopup);
     }
 }
 
@@ -1832,6 +1839,9 @@ static void WINHELP_DeleteWindow(WINHELP_WINDOW* win)
             SetActiveWindow(Globals.win_list->hMainWnd);
     }
 
+    if (win == Globals.active_popup)
+        Globals.active_popup = NULL;
+
     WINHELP_DeleteButtons(win);
 
     if (win->hShadowWnd) DestroyWindow(win->hShadowWnd);
diff --git a/programs/winhelp/winhelp.h b/programs/winhelp/winhelp.h
index a8f211e..b3ebac1 100644
--- a/programs/winhelp/winhelp.h
+++ b/programs/winhelp/winhelp.h
@@ -166,9 +166,9 @@ typedef struct
 {
     UINT                wVersion;
     HANDLE              hInstance;
-    HWND                hPopupWnd;
     BOOL                isBook;
     WINHELP_WINDOW*     active_win;
+    WINHELP_WINDOW*     active_popup;
     WINHELP_WINDOW*     win_list;
     WNDPROC             button_proc;
     WINHELP_DLL*        dlls;





More information about the wine-patches mailing list