[PATCH 05/21] [WinHelp]: properly handle the back button (in multiple windows, in empty stack...)
Eric Pouech
eric.pouech at orange.fr
Mon Apr 21 14:07:17 CDT 2008
A+
---
programs/winhelp/macro.c | 12 +-----------
programs/winhelp/winhelp.c | 22 +++++++++++++++++++---
programs/winhelp/winhelp.h | 1 +
3 files changed, 21 insertions(+), 14 deletions(-)
diff --git a/programs/winhelp/macro.c b/programs/winhelp/macro.c
index ca11b5a..877d33f 100644
--- a/programs/winhelp/macro.c
+++ b/programs/winhelp/macro.c
@@ -230,17 +230,7 @@ void CALLBACK MACRO_BackFlush(void)
WINE_TRACE("()\n");
- if (win)
- {
- unsigned int i;
-
- for (i = 0; i < win->back.index; i++)
- {
- HLPFILE_FreeHlpFile(win->back.set[i].page->file);
- win->back.set[i].page = NULL;
- }
- win->back.index = 0;
- }
+ if (win) WINHELP_DeleteBackSet(win);
}
void CALLBACK MACRO_BookmarkDefine(void)
diff --git a/programs/winhelp/winhelp.c b/programs/winhelp/winhelp.c
index feb592a..f4cd0fe 100644
--- a/programs/winhelp/winhelp.c
+++ b/programs/winhelp/winhelp.c
@@ -549,6 +549,8 @@ BOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE* wpage, int nCmdShow)
wpage->wininfo->size.cy != CW_USEDEFAULT)
SetWindowPos(win->hMainWnd, HWND_TOP,
0, 0, wpage->wininfo->size.cx, wpage->wininfo->size.cy, SWP_NOMOVE);
+ if (wpage->page && wpage->page->file != win->page->file)
+ WINHELP_DeleteBackSet(win);
WINHELP_InitFonts(win->hMainWnd);
WINHELP_SetupText(GetDlgItem(win->hMainWnd, CTL_ID_TEXT));
@@ -1812,6 +1814,22 @@ static void WINHELP_DeleteButtons(WINHELP_WINDOW* win)
win->first_button = NULL;
}
+/******************************************************************
+ * WINHELP_DeleteButtons
+ *
+ */
+void WINHELP_DeleteBackSet(WINHELP_WINDOW* win)
+{
+ unsigned int i;
+
+ for (i = 0; i < win->back.index; i++)
+ {
+ HLPFILE_FreeHlpFile(win->back.set[i].page->file);
+ win->back.set[i].page = NULL;
+ }
+ win->back.index = 0;
+}
+
/***********************************************************************
*
* WINHELP_DeleteWindow
@@ -1819,7 +1837,6 @@ static void WINHELP_DeleteButtons(WINHELP_WINDOW* win)
static void WINHELP_DeleteWindow(WINHELP_WINDOW* win)
{
WINHELP_WINDOW** w;
- unsigned int i;
for (w = &Globals.win_list; *w; w = &(*w)->next)
{
@@ -1844,8 +1861,7 @@ static void WINHELP_DeleteWindow(WINHELP_WINDOW* win)
DeleteObject(win->hBrush);
- for (i = 0; i < win->back.index; i++)
- HLPFILE_FreeHlpFile(win->back.set[i].page->file);
+ WINHELP_DeleteBackSet(win);
if (win->page) HLPFILE_FreeHlpFile(win->page->file);
WINHELP_DeleteLines(win);
diff --git a/programs/winhelp/winhelp.h b/programs/winhelp/winhelp.h
index 5b23994..f1f67d2 100644
--- a/programs/winhelp/winhelp.h
+++ b/programs/winhelp/winhelp.h
@@ -183,6 +183,7 @@ BOOL WINHELP_CreateHelpWindowByOffset(HLPFILE*, LONG, HLPFILE_WINDOWINFO*, int);
BOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE*, int);
BOOL WINHELP_GetOpenFileName(LPSTR, int);
BOOL WINHELP_CreateIndexWindow(void);
+void WINHELP_DeleteBackSet(WINHELP_WINDOW*);
INT WINHELP_MessageBoxIDS(UINT, UINT, WORD);
INT WINHELP_MessageBoxIDS_s(UINT, LPCSTR, UINT, WORD);
HLPFILE* WINHELP_LookupHelpFile(LPCSTR lpszFile);
More information about the wine-patches
mailing list