Module: wine Branch: master Commit: ccd75350dde23805d82000a9c290cf5d584cdded URL: http://source.winehq.org/git/wine.git/?a=commit;h=ccd75350dde23805d82000a9c2...
Author: Eric Pouech eric.pouech@orange.fr Date: Tue Apr 22 21:59:57 2008 +0200
winhelp: Properly handle the back button (in multiple windows, in empty stack...).
---
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 2011d2a..a33c470 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);
win->page = wpage->page; @@ -1814,6 +1816,22 @@ static void WINHELP_DeleteButtons(WINHELP_WINDOW* win) win->first_button = NULL; }
+/****************************************************************** + * WINHELP_DeleteBackSet + * + */ +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 @@ -1821,7 +1839,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) { @@ -1846,8 +1863,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);