From 89ab9f08ab482e1a6f6fd10b30af5e0d84cd221a Mon Sep 17 00:00:00 2001 From: Pierre Mageau Date: Wed, 13 Oct 1999 15:54:08 +0000 Subject: [PATCH] When an error occurred in a property sheet because of invalid data, clicking on another tab, would activate the new tab but keep the original property sheet. --- dlls/comctl32/propsheet.c | 61 +++++++++++++++++++++++++++++++++++++++++++---- dlls/comctl32/tab.c | 17 +++++++------ 2 files changed, 64 insertions(+), 14 deletions(-) diff --git a/dlls/comctl32/propsheet.c b/dlls/comctl32/propsheet.c index 355a1523f93..9e379c908b3 100644 --- a/dlls/comctl32/propsheet.c +++ b/dlls/comctl32/propsheet.c @@ -108,6 +108,7 @@ static void PROPSHEET_UnChanged(HWND hwndDlg, HWND hwndCleanPage); static void PROPSHEET_PressButton(HWND hwndDlg, int buttonID); static void PROPSHEET_SetFinishTextA(HWND hwndDlg, LPCSTR lpszText); static void PROPSHEET_SetTitleA(HWND hwndDlg, DWORD dwStyle, LPCSTR lpszText); +static BOOL PROPSHEET_CanSetCurSel(HWND hwndDlg); static BOOL PROPSHEET_SetCurSel(HWND hwndDlg, int index, HPROPSHEETPAGE hpage); @@ -1022,7 +1023,11 @@ static BOOL PROPSHEET_Back(HWND hwndDlg) if (SendMessageA(hwndPage, WM_NOTIFY, 0, (LPARAM) &hdr) == -1) return FALSE; - res = PROPSHEET_SetCurSel(hwndDlg, psInfo->active_page - 1, 0); + res = PROPSHEET_CanSetCurSel(hwndDlg); + if(res != FALSE) + { + res = PROPSHEET_SetCurSel(hwndDlg, psInfo->active_page - 1, 0); + } /* if we went to page 0, disable Back button */ if (res && (psInfo->active_page == 0)) @@ -1053,7 +1058,10 @@ static BOOL PROPSHEET_Next(HWND hwndDlg) if (msgResult == -1) return FALSE; - PROPSHEET_SetCurSel(hwndDlg, psInfo->active_page + 1, 0); + if(PROPSHEET_CanSetCurSel(hwndDlg) != FALSE) + { + PROPSHEET_SetCurSel(hwndDlg, psInfo->active_page + 1, 0); + } return TRUE; } @@ -1263,6 +1271,37 @@ static void PROPSHEET_PressButton(HWND hwndDlg, int buttonID) } } + +/************************************************************************* + * BOOL PROPSHEET_CanSetCurSel [Internal] + * + * Test weither the current page can be change by sending a PSN_KILLACTIVE + * + * PARAMS + * hwndDlg [I] handle to a Dialog hWnd + * + * RETURNS + * TRUE if Current Selection can change + * + * NOTES + */ +static BOOL PROPSHEET_CanSetCurSel(HWND hwndDlg) +{ + PropSheetInfo* psInfo = (PropSheetInfo*) GetPropA(hwndDlg, + PropSheetInfoStr); + HWND hwndPage; + NMHDR hdr; + /* + * Notify the current page. + */ + hwndPage = psInfo->proppage[psInfo->active_page].hwndPage; + + hdr.hwndFrom = hwndDlg; + hdr.code = PSN_KILLACTIVE; + + return !SendMessageA(hwndPage, WM_NOTIFY, 0, (LPARAM) &hdr); +} + /****************************************************************************** * PROPSHEET_SetCurSel */ @@ -1895,6 +1934,14 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) PROPSHEET_SetCurSel(hwnd, index, 0); } + if(pnmh->code == TCN_SELCHANGING) + { + BOOL bRet = PROPSHEET_CanSetCurSel(hwnd); + SetWindowLongA(hwnd, DWL_MSGRESULT, !bRet); + return TRUE; + } + + return 0; } @@ -1933,9 +1980,13 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { BOOL msgResult; - msgResult = PROPSHEET_SetCurSel(hwnd, - (int)wParam, - (HPROPSHEETPAGE)lParam); + msgResult = PROPSHEET_CanSetCurSel(hwnd); + if(msgResult != FALSE) + { + msgResult = PROPSHEET_SetCurSel(hwnd, + (int)wParam, + (HPROPSHEETPAGE)lParam); + } SetWindowLongA(hwnd, DWL_MSGRESULT, msgResult); diff --git a/dlls/comctl32/tab.c b/dlls/comctl32/tab.c index 7e185f535f1..a7b28c874e1 100644 --- a/dlls/comctl32/tab.c +++ b/dlls/comctl32/tab.c @@ -371,6 +371,8 @@ static LRESULT TAB_LButtonDown (HWND hwnd, WPARAM wParam, LPARAM lParam) { TAB_INFO *infoPtr = TAB_GetInfoPtr(hwnd); + POINT pt; + INT newItem,dummy; if (infoPtr->hwndToolTip) TAB_RelayEvent (infoPtr->hwndToolTip, hwnd, @@ -379,16 +381,7 @@ TAB_LButtonDown (HWND hwnd, WPARAM wParam, LPARAM lParam) if (GetWindowLongA(hwnd, GWL_STYLE) & TCS_FOCUSONBUTTONDOWN ) { SetFocus (hwnd); } - return 0; -} -static LRESULT -TAB_LButtonUp (HWND hwnd, WPARAM wParam, LPARAM lParam) -{ - TAB_INFO *infoPtr = TAB_GetInfoPtr(hwnd); - POINT pt; - INT newItem,dummy; - if (infoPtr->hwndToolTip) TAB_RelayEvent (infoPtr->hwndToolTip, hwnd, WM_LBUTTONDOWN, wParam, lParam); @@ -414,6 +407,12 @@ TAB_LButtonUp (HWND hwnd, WPARAM wParam, LPARAM lParam) TAB_InvalidateTabArea(hwnd, infoPtr); } } + return 0; +} + +static LRESULT +TAB_LButtonUp (HWND hwnd, WPARAM wParam, LPARAM lParam) +{ TAB_SendSimpleNotify(hwnd, NM_CLICK); return 0; -- 2.11.4.GIT