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