[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