comctl32: Set the sheet caption before invoking the sheet callback
and before creating the pages
Huw D M Davies
h.davies1 at physics.ox.ac.uk
Thu Apr 6 10:55:32 CDT 2006
Huw Davies <huw at codeweavers.com>
comctl32: Set the sheet caption before invoking the sheet callback and
before creating the pages.
--
Huw Davies
huw at codeweavers.com
---
dlls/comctl32/propsheet.c | 31 ++++++-----
dlls/comctl32/tests/Makefile.in | 3 +
dlls/comctl32/tests/propsheet.c | 107 ++++++++++++++++++++++++++++++++++++++
dlls/comctl32/tests/propsheet.rc | 29 ++++++++++
4 files changed, 155 insertions(+), 15 deletions(-)
create mode 100644 dlls/comctl32/tests/propsheet.c
create mode 100644 dlls/comctl32/tests/propsheet.rc
0cae0774df97e2f84b994b9d0ffe6eed4359ac98
diff --git a/dlls/comctl32/propsheet.c b/dlls/comctl32/propsheet.c
index 78fdc43..141b794 100644
--- a/dlls/comctl32/propsheet.c
+++ b/dlls/comctl32/propsheet.c
@@ -3427,21 +3427,6 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMs
}
}
- if (psInfo->useCallback)
- (*(psInfo->ppshheader.pfnCallback))(hwnd,
- PSCB_INITIALIZED, (LPARAM)0);
-
- idx = psInfo->active_page;
- ppshpage = (LPCPROPSHEETPAGEW)psInfo->proppage[idx].hpage;
- psInfo->active_page = -1;
-
- PROPSHEET_SetCurSel(hwnd, idx, 1, psInfo->proppage[idx].hpage);
-
- /* doing TCM_SETCURSEL seems to be needed even in case of PSH_WIZARD,
- * as some programs call TCM_GETCURSEL to get the current selection
- * from which to switch to the next page */
- SendMessageW(hwndTabCtrl, TCM_SETCURSEL, psInfo->active_page, 0);
-
if (!HIWORD(psInfo->ppshheader.pszCaption) &&
psInfo->ppshheader.hInstance)
{
@@ -3457,6 +3442,22 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMs
psInfo->ppshheader.pszCaption);
}
+
+ if (psInfo->useCallback)
+ (*(psInfo->ppshheader.pfnCallback))(hwnd,
+ PSCB_INITIALIZED, (LPARAM)0);
+
+ idx = psInfo->active_page;
+ ppshpage = (LPCPROPSHEETPAGEW)psInfo->proppage[idx].hpage;
+ psInfo->active_page = -1;
+
+ PROPSHEET_SetCurSel(hwnd, idx, 1, psInfo->proppage[idx].hpage);
+
+ /* doing TCM_SETCURSEL seems to be needed even in case of PSH_WIZARD,
+ * as some programs call TCM_GETCURSEL to get the current selection
+ * from which to switch to the next page */
+ SendMessageW(hwndTabCtrl, TCM_SETCURSEL, psInfo->active_page, 0);
+
return TRUE;
}
diff --git a/dlls/comctl32/tests/Makefile.in b/dlls/comctl32/tests/Makefile.in
index 87af63c..c277bd4 100644
--- a/dlls/comctl32/tests/Makefile.in
+++ b/dlls/comctl32/tests/Makefile.in
@@ -13,6 +13,7 @@ CTESTS = \
monthcal.c \
mru.c \
progress.c \
+ propsheet.c \
subclass.c \
tab.c \
toolbar.c \
@@ -20,6 +21,8 @@ CTESTS = \
treeview.c \
updown.c
+RC_SRCS = propsheet.rc
+
@MAKE_TEST_RULES@
### Dependencies:
diff --git a/dlls/comctl32/tests/propsheet.c b/dlls/comctl32/tests/propsheet.c
new file mode 100644
index 0000000..a273ad0
--- /dev/null
+++ b/dlls/comctl32/tests/propsheet.c
@@ -0,0 +1,107 @@
+/* Unit test suite for property sheet control.
+ *
+ * Copyright 2006 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define NONAMELESSUNION
+#define NONAMELESSSTRUCT
+
+#include <windows.h>
+#include <commctrl.h>
+
+#include "wine/test.h"
+
+static int CALLBACK sheet_callback(HWND hwnd, UINT msg, LPARAM lparam)
+{
+ switch(msg)
+ {
+ case PSCB_INITIALIZED:
+ {
+ char caption[256];
+ GetWindowTextA(hwnd, caption, sizeof(caption));
+ ok(!strcmp(caption,"test caption"), "caption: %s\n", caption);
+ return 0;
+ }
+ }
+ return 0;
+}
+
+static INT_PTR CALLBACK page_dlg_proc(HWND hwnd, UINT msg, WPARAM wparam,
+ LPARAM lparam)
+{
+ switch(msg)
+ {
+ case WM_INITDIALOG:
+ {
+ HWND sheet = GetParent(hwnd);
+ char caption[256];
+ GetWindowTextA(sheet, caption, sizeof(caption));
+ ok(!strcmp(caption,"test caption"), "caption: %s\n", caption);
+ return TRUE;
+ }
+
+ case WM_NOTIFY:
+ {
+ NMHDR *nmhdr = (NMHDR *)lparam;
+ switch(nmhdr->code)
+ {
+ case PSN_APPLY:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+ }
+ default:
+ return FALSE;
+ }
+}
+
+static void test_title(void)
+{
+ HPROPSHEETPAGE hpsp[1];
+ PROPSHEETPAGEA psp;
+ PROPSHEETHEADERA psh;
+ HWND hdlg;
+
+ memset(&psp, 0, sizeof(psp));
+ psp.dwSize = sizeof(psp);
+ psp.dwFlags = 0;
+ psp.hInstance = GetModuleHandleW(NULL);
+ psp.u.pszTemplate = "prop_page1";
+ psp.u2.pszIcon = NULL;
+ psp.pfnDlgProc = page_dlg_proc;
+ psp.lParam = 0;
+
+ hpsp[0] = CreatePropertySheetPageA(&psp);
+
+ memset(&psh, 0, sizeof(psh));
+ psh.dwSize = sizeof(psh);
+ psh.dwFlags = PSH_MODELESS | PSH_USECALLBACK;
+ psh.pszCaption = "test caption";
+ psh.nPages = 1;
+ psh.hwndParent = GetDesktopWindow();
+ psh.u3.phpage = hpsp;
+ psh.pfnCallback = sheet_callback;
+
+ hdlg = (HWND)PropertySheetA(&psh);
+ DestroyWindow(hdlg);
+}
+
+START_TEST(propsheet)
+{
+ test_title();
+}
diff --git a/dlls/comctl32/tests/propsheet.rc b/dlls/comctl32/tests/propsheet.rc
new file mode 100644
index 0000000..93b8ce7
--- /dev/null
+++ b/dlls/comctl32/tests/propsheet.rc
@@ -0,0 +1,29 @@
+/* Resources for the unit test suite for property sheet control.
+ *
+ * Copyright 2006 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "windef.h"
+#include "winuser.h"
+
+PROP_PAGE1 DIALOG LOADONCALL MOVEABLE DISCARDABLE 5, 43, 227, 215
+STYLE WS_POPUP | WS_CAPTION | WS_CLIPSIBLINGS | WS_VISIBLE
+CAPTION "Page1"
+FONT 8, "MS Shell Dlg"
+{
+ LTEXT "Test", -1, 10, 6, 100, 8
+}
--
1.2.4
More information about the wine-patches
mailing list