Commit c457fbdd authored by Andreas Mohr's avatar Andreas Mohr Committed by Alexandre Julliard

Fixed tab control index handling.

parent 99f54153
...@@ -151,6 +151,8 @@ static BOOL PROPSHEET_CollectSheetInfo(LPCPROPSHEETHEADERA lppsh, ...@@ -151,6 +151,8 @@ static BOOL PROPSHEET_CollectSheetInfo(LPCPROPSHEETHEADERA lppsh,
psInfo->isModeless = dwFlags & PSH_MODELESS; psInfo->isModeless = dwFlags & PSH_MODELESS;
memcpy(&psInfo->ppshheader,lppsh,dwSize); memcpy(&psInfo->ppshheader,lppsh,dwSize);
TRACE("\n** PROPSHEETHEADER **\ndwSize\t\t%ld\ndwFlags\t\t%08lx\nhwndParent\t%04x\nhInstance\t%08x\npszCaption\t'%s'\nnPages\t\t%d\npfnCallback\t%p\n",
lppsh->dwSize, lppsh->dwFlags, lppsh->hwndParent, lppsh->hInstance, lppsh->pszCaption, lppsh->nPages, lppsh->pfnCallback);
if (HIWORD(lppsh->pszCaption)) if (HIWORD(lppsh->pszCaption))
{ {
...@@ -193,6 +195,7 @@ BOOL PROPSHEET_CollectPageInfo(LPCPROPSHEETPAGEA lppsp, ...@@ -193,6 +195,7 @@ BOOL PROPSHEET_CollectPageInfo(LPCPROPSHEETPAGEA lppsp,
DWORD dwFlags; DWORD dwFlags;
int width, height; int width, height;
TRACE("\n");
psInfo->proppage[index].hpage = (HPROPSHEETPAGE)lppsp; psInfo->proppage[index].hpage = (HPROPSHEETPAGE)lppsp;
psInfo->proppage[index].hwndPage = 0; psInfo->proppage[index].hwndPage = 0;
psInfo->proppage[index].isDirty = FALSE; psInfo->proppage[index].isDirty = FALSE;
...@@ -358,6 +361,7 @@ BOOL PROPSHEET_CreateDialog(PropSheetInfo* psInfo) ...@@ -358,6 +361,7 @@ BOOL PROPSHEET_CreateDialog(PropSheetInfo* psInfo)
DWORD resSize; DWORD resSize;
WORD resID = IDD_PROPSHEET; WORD resID = IDD_PROPSHEET;
TRACE("\n");
if (psInfo->ppshheader.dwFlags & PSH_WIZARD) if (psInfo->ppshheader.dwFlags & PSH_WIZARD)
resID = IDD_WIZARD; resID = IDD_WIZARD;
...@@ -873,6 +877,7 @@ static PADDING_INFO PROPSHEET_GetPaddingInfoWizard(HWND hwndDlg, const PropSheet ...@@ -873,6 +877,7 @@ static PADDING_INFO PROPSHEET_GetPaddingInfoWizard(HWND hwndDlg, const PropSheet
INT idButton; INT idButton;
POINT ptButton, ptLine; POINT ptButton, ptLine;
TRACE("\n");
if (psInfo->hasHelp) if (psInfo->hasHelp)
{ {
idButton = IDHELP; idButton = IDHELP;
...@@ -931,6 +936,7 @@ static BOOL PROPSHEET_CreateTabControl(HWND hwndParent, ...@@ -931,6 +936,7 @@ static BOOL PROPSHEET_CreateTabControl(HWND hwndParent,
int iImage = 0; int iImage = 0;
char tabtext[MAX_TABTEXT_LENGTH] = "Tab text"; char tabtext[MAX_TABTEXT_LENGTH] = "Tab text";
TRACE("\n");
item.mask = TCIF_TEXT; item.mask = TCIF_TEXT;
item.pszText = tabtext; item.pszText = tabtext;
item.cchTextMax = MAX_TABTEXT_LENGTH; item.cchTextMax = MAX_TABTEXT_LENGTH;
...@@ -1094,6 +1100,9 @@ static BOOL PROPSHEET_CreatePage(HWND hwndParent, ...@@ -1094,6 +1100,9 @@ static BOOL PROPSHEET_CreatePage(HWND hwndParent,
*/ */
static BOOL PROPSHEET_ShowPage(HWND hwndDlg, int index, PropSheetInfo * psInfo) static BOOL PROPSHEET_ShowPage(HWND hwndDlg, int index, PropSheetInfo * psInfo)
{ {
HWND hwndTabCtrl;
TRACE("active_page %d, index %d\n", psInfo->active_page, index);
if (index == psInfo->active_page) if (index == psInfo->active_page)
{ {
if (GetTopWindow(hwndDlg) != psInfo->proppage[index].hwndPage) if (GetTopWindow(hwndDlg) != psInfo->proppage[index].hwndPage)
...@@ -1114,14 +1123,10 @@ static BOOL PROPSHEET_ShowPage(HWND hwndDlg, int index, PropSheetInfo * psInfo) ...@@ -1114,14 +1123,10 @@ static BOOL PROPSHEET_ShowPage(HWND hwndDlg, int index, PropSheetInfo * psInfo)
ShowWindow(psInfo->proppage[index].hwndPage, SW_SHOW); ShowWindow(psInfo->proppage[index].hwndPage, SW_SHOW);
if (!(psInfo->ppshheader.dwFlags & PSH_WIZARD)) /* Synchronize current selection with tab control
{ * It seems to be needed even in case of PSH_WIZARD (no tab controls there) */
HWND hwndTabCtrl; hwndTabCtrl = GetDlgItem(hwndDlg, IDC_TABCONTROL);
SendMessageA(hwndTabCtrl, TCM_SETCURSEL, index, 0);
/* Synchronize current selection with tab control */
hwndTabCtrl = GetDlgItem(hwndDlg, IDC_TABCONTROL);
SendMessageA(hwndTabCtrl, TCM_SETCURSEL, index, 0);
}
psInfo->active_page = index; psInfo->active_page = index;
psInfo->activeValid = TRUE; psInfo->activeValid = TRUE;
...@@ -1141,6 +1146,7 @@ static BOOL PROPSHEET_Back(HWND hwndDlg) ...@@ -1141,6 +1146,7 @@ static BOOL PROPSHEET_Back(HWND hwndDlg)
PropSheetInfoStr); PropSheetInfoStr);
LRESULT result; LRESULT result;
TRACE("active_page %d\n", psInfo->active_page);
if (psInfo->active_page < 0) if (psInfo->active_page < 0)
return FALSE; return FALSE;
...@@ -1178,6 +1184,7 @@ static BOOL PROPSHEET_Next(HWND hwndDlg) ...@@ -1178,6 +1184,7 @@ static BOOL PROPSHEET_Next(HWND hwndDlg)
PropSheetInfo* psInfo = (PropSheetInfo*) GetPropA(hwndDlg, PropSheetInfo* psInfo = (PropSheetInfo*) GetPropA(hwndDlg,
PropSheetInfoStr); PropSheetInfoStr);
TRACE("active_page %d\n", psInfo->active_page);
if (psInfo->active_page < 0) if (psInfo->active_page < 0)
return FALSE; return FALSE;
...@@ -1211,6 +1218,7 @@ static BOOL PROPSHEET_Finish(HWND hwndDlg) ...@@ -1211,6 +1218,7 @@ static BOOL PROPSHEET_Finish(HWND hwndDlg)
PropSheetInfo* psInfo = (PropSheetInfo*) GetPropA(hwndDlg, PropSheetInfo* psInfo = (PropSheetInfo*) GetPropA(hwndDlg,
PropSheetInfoStr); PropSheetInfoStr);
TRACE("active_page %d\n", psInfo->active_page);
if (psInfo->active_page < 0) if (psInfo->active_page < 0)
return FALSE; return FALSE;
...@@ -1248,6 +1256,7 @@ static BOOL PROPSHEET_Apply(HWND hwndDlg, LPARAM lParam) ...@@ -1248,6 +1256,7 @@ static BOOL PROPSHEET_Apply(HWND hwndDlg, LPARAM lParam)
PropSheetInfo* psInfo = (PropSheetInfo*) GetPropA(hwndDlg, PropSheetInfo* psInfo = (PropSheetInfo*) GetPropA(hwndDlg,
PropSheetInfoStr); PropSheetInfoStr);
TRACE("active_page %d\n", psInfo->active_page);
if (psInfo->active_page < 0) if (psInfo->active_page < 0)
return FALSE; return FALSE;
...@@ -1309,6 +1318,7 @@ static void PROPSHEET_Cancel(HWND hwndDlg, LPARAM lParam) ...@@ -1309,6 +1318,7 @@ static void PROPSHEET_Cancel(HWND hwndDlg, LPARAM lParam)
PSHNOTIFY psn; PSHNOTIFY psn;
int i; int i;
TRACE("active_page %d\n", psInfo->active_page);
if (psInfo->active_page < 0) if (psInfo->active_page < 0)
return; return;
...@@ -1351,6 +1361,7 @@ static void PROPSHEET_Help(HWND hwndDlg) ...@@ -1351,6 +1361,7 @@ static void PROPSHEET_Help(HWND hwndDlg)
HWND hwndPage; HWND hwndPage;
PSHNOTIFY psn; PSHNOTIFY psn;
TRACE("active_page %d\n", psInfo->active_page);
if (psInfo->active_page < 0) if (psInfo->active_page < 0)
return; return;
...@@ -1372,6 +1383,7 @@ static void PROPSHEET_Changed(HWND hwndDlg, HWND hwndDirtyPage) ...@@ -1372,6 +1383,7 @@ static void PROPSHEET_Changed(HWND hwndDlg, HWND hwndDirtyPage)
PropSheetInfo* psInfo = (PropSheetInfo*) GetPropA(hwndDlg, PropSheetInfo* psInfo = (PropSheetInfo*) GetPropA(hwndDlg,
PropSheetInfoStr); PropSheetInfoStr);
TRACE("\n");
if (!psInfo) return; if (!psInfo) return;
/* /*
* Set the dirty flag of this page. * Set the dirty flag of this page.
...@@ -1404,6 +1416,7 @@ static void PROPSHEET_UnChanged(HWND hwndDlg, HWND hwndCleanPage) ...@@ -1404,6 +1416,7 @@ static void PROPSHEET_UnChanged(HWND hwndDlg, HWND hwndCleanPage)
PropSheetInfo* psInfo = (PropSheetInfo*) GetPropA(hwndDlg, PropSheetInfo* psInfo = (PropSheetInfo*) GetPropA(hwndDlg,
PropSheetInfoStr); PropSheetInfoStr);
TRACE("\n");
if ( !psInfo ) return; if ( !psInfo ) return;
for (i = 0; i < psInfo->nPages; i++) for (i = 0; i < psInfo->nPages; i++)
{ {
...@@ -1428,6 +1441,7 @@ static void PROPSHEET_UnChanged(HWND hwndDlg, HWND hwndCleanPage) ...@@ -1428,6 +1441,7 @@ static void PROPSHEET_UnChanged(HWND hwndDlg, HWND hwndCleanPage)
*/ */
static void PROPSHEET_PressButton(HWND hwndDlg, int buttonID) static void PROPSHEET_PressButton(HWND hwndDlg, int buttonID)
{ {
TRACE("buttonID %d\n", buttonID);
switch (buttonID) switch (buttonID)
{ {
case PSBTN_APPLYNOW: case PSBTN_APPLYNOW:
...@@ -1476,12 +1490,20 @@ static BOOL PROPSHEET_CanSetCurSel(HWND hwndDlg) ...@@ -1476,12 +1490,20 @@ static BOOL PROPSHEET_CanSetCurSel(HWND hwndDlg)
PropSheetInfoStr); PropSheetInfoStr);
HWND hwndPage; HWND hwndPage;
PSHNOTIFY psn; PSHNOTIFY psn;
BOOL res = FALSE;
TRACE("active_page %d\n", psInfo->active_page);
if (!psInfo) if (!psInfo)
return FALSE; {
res = FALSE;
goto end;
}
if (psInfo->active_page < 0) if (psInfo->active_page < 0)
return TRUE; {
res = TRUE;
goto end;
}
/* /*
* Notify the current page. * Notify the current page.
...@@ -1492,7 +1514,11 @@ static BOOL PROPSHEET_CanSetCurSel(HWND hwndDlg) ...@@ -1492,7 +1514,11 @@ static BOOL PROPSHEET_CanSetCurSel(HWND hwndDlg)
psn.hdr.idFrom = 0; psn.hdr.idFrom = 0;
psn.lParam = 0; psn.lParam = 0;
return !SendMessageA(hwndPage, WM_NOTIFY, 0, (LPARAM) &psn); res = !SendMessageA(hwndPage, WM_NOTIFY, 0, (LPARAM) &psn);
end:
TRACE("<-- %d\n", res);
return res;
} }
/****************************************************************************** /******************************************************************************
...@@ -1507,6 +1533,7 @@ static BOOL PROPSHEET_SetCurSel(HWND hwndDlg, ...@@ -1507,6 +1533,7 @@ static BOOL PROPSHEET_SetCurSel(HWND hwndDlg,
PropSheetInfo* psInfo = (PropSheetInfo*) GetPropA(hwndDlg, PropSheetInfoStr); PropSheetInfo* psInfo = (PropSheetInfo*) GetPropA(hwndDlg, PropSheetInfoStr);
HWND hwndHelp = GetDlgItem(hwndDlg, IDHELP); HWND hwndHelp = GetDlgItem(hwndDlg, IDHELP);
TRACE("index %d, skipdir %d, hpage %p\n", index, skipdir, hpage);
/* hpage takes precedence over index */ /* hpage takes precedence over index */
if (hpage != NULL) if (hpage != NULL)
index = PROPSHEET_GetPageIndex(hpage, psInfo); index = PROPSHEET_GetPageIndex(hpage, psInfo);
...@@ -1569,6 +1596,7 @@ static void PROPSHEET_SetTitleA(HWND hwndDlg, DWORD dwStyle, LPCSTR lpszText) ...@@ -1569,6 +1596,7 @@ static void PROPSHEET_SetTitleA(HWND hwndDlg, DWORD dwStyle, LPCSTR lpszText)
PropSheetInfo* psInfo = (PropSheetInfo*) GetPropA(hwndDlg, PropSheetInfoStr); PropSheetInfo* psInfo = (PropSheetInfo*) GetPropA(hwndDlg, PropSheetInfoStr);
char szTitle[256]; char szTitle[256];
TRACE("'%s' (style %08lx)\n", lpszText, dwStyle);
if (HIWORD(lpszText) == 0) { if (HIWORD(lpszText) == 0) {
if (!LoadStringA(psInfo->ppshheader.hInstance, if (!LoadStringA(psInfo->ppshheader.hInstance,
LOWORD(lpszText), szTitle, sizeof(szTitle)-1)) LOWORD(lpszText), szTitle, sizeof(szTitle)-1))
...@@ -1599,6 +1627,7 @@ static void PROPSHEET_SetFinishTextA(HWND hwndDlg, LPCSTR lpszText) ...@@ -1599,6 +1627,7 @@ static void PROPSHEET_SetFinishTextA(HWND hwndDlg, LPCSTR lpszText)
{ {
HWND hwndButton = GetDlgItem(hwndDlg, IDC_FINISH_BUTTON); HWND hwndButton = GetDlgItem(hwndDlg, IDC_FINISH_BUTTON);
TRACE("'%s'\n", lpszText);
/* Set text, show and enable the Finish button */ /* Set text, show and enable the Finish button */
SetWindowTextA(hwndButton, lpszText); SetWindowTextA(hwndButton, lpszText);
ShowWindow(hwndButton, SW_SHOW); ShowWindow(hwndButton, SW_SHOW);
...@@ -1652,6 +1681,7 @@ static BOOL PROPSHEET_AddPage(HWND hwndDlg, ...@@ -1652,6 +1681,7 @@ static BOOL PROPSHEET_AddPage(HWND hwndDlg,
char tabtext[MAX_TABTEXT_LENGTH] = "Tab text"; char tabtext[MAX_TABTEXT_LENGTH] = "Tab text";
LPCPROPSHEETPAGEA ppsp = (LPCPROPSHEETPAGEA)hpage; LPCPROPSHEETPAGEA ppsp = (LPCPROPSHEETPAGEA)hpage;
TRACE("hpage %p\n", hpage);
/* /*
* Allocate and fill in a new PropPageInfo entry. * Allocate and fill in a new PropPageInfo entry.
*/ */
...@@ -1703,6 +1733,7 @@ static BOOL PROPSHEET_RemovePage(HWND hwndDlg, ...@@ -1703,6 +1733,7 @@ static BOOL PROPSHEET_RemovePage(HWND hwndDlg,
HWND hwndTabControl = GetDlgItem(hwndDlg, IDC_TABCONTROL); HWND hwndTabControl = GetDlgItem(hwndDlg, IDC_TABCONTROL);
PropPageInfo* oldPages; PropPageInfo* oldPages;
TRACE("index %d, hpage %p\n", index, hpage);
if (!psInfo) { if (!psInfo) {
return FALSE; return FALSE;
} }
...@@ -1851,6 +1882,7 @@ static int PROPSHEET_GetPageIndex(HPROPSHEETPAGE hpage, PropSheetInfo* psInfo) ...@@ -1851,6 +1882,7 @@ static int PROPSHEET_GetPageIndex(HPROPSHEETPAGE hpage, PropSheetInfo* psInfo)
BOOL found = FALSE; BOOL found = FALSE;
int index = 0; int index = 0;
TRACE("hpage %p\n", hpage);
while ((index < psInfo->nPages) && (found == FALSE)) while ((index < psInfo->nPages) && (found == FALSE))
{ {
if (psInfo->proppage[index].hpage == hpage) if (psInfo->proppage[index].hpage == hpage)
...@@ -2028,6 +2060,7 @@ static BOOL PROPSHEET_IsDialogMessage(HWND hwnd, LPMSG lpMsg) ...@@ -2028,6 +2060,7 @@ static BOOL PROPSHEET_IsDialogMessage(HWND hwnd, LPMSG lpMsg)
{ {
PropSheetInfo* psInfo = (PropSheetInfo*) GetPropA(hwnd, PropSheetInfoStr); PropSheetInfo* psInfo = (PropSheetInfo*) GetPropA(hwnd, PropSheetInfoStr);
TRACE("\n");
if (!psInfo || (hwnd != lpMsg->hwnd && !IsChild(hwnd, lpMsg->hwnd))) if (!psInfo || (hwnd != lpMsg->hwnd && !IsChild(hwnd, lpMsg->hwnd)))
return FALSE; return FALSE;
...@@ -2158,8 +2191,10 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) ...@@ -2158,8 +2191,10 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
PROPSHEET_SetCurSel(hwnd, idx, 1, psInfo->proppage[idx].hpage); PROPSHEET_SetCurSel(hwnd, idx, 1, psInfo->proppage[idx].hpage);
if (!(psInfo->ppshheader.dwFlags & PSH_WIZARD)) /* doing TCM_SETCURSEL seems to be needed even in case of PSH_WIZARD,
SendMessageA(hwndTabCtrl, TCM_SETCURSEL, psInfo->active_page, 0); * as some programs call TCM_GETCURSEL to get the current selection
* from which to switch to the next page */
SendMessageA(hwndTabCtrl, TCM_SETCURSEL, psInfo->active_page, 0);
if (!HIWORD(psInfo->ppshheader.pszCaption) && if (!HIWORD(psInfo->ppshheader.pszCaption) &&
psInfo->ppshheader.hInstance) psInfo->ppshheader.hInstance)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment