Jan de Mooij : comctl32/propsheet: Update position of hidden buttons too.

Alexandre Julliard julliard at winehq.org
Tue Sep 1 11:06:04 CDT 2009


Module: wine
Branch: master
Commit: 2f8e5da90f819b0fba565b96ac06263463d06296
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2f8e5da90f819b0fba565b96ac06263463d06296

Author: Jan de Mooij <jandemooij at gmail.com>
Date:   Mon Aug 31 14:09:00 2009 +0200

comctl32/propsheet: Update position of hidden buttons too.

---

 dlls/comctl32/propsheet.c       |   31 +++++++------------
 dlls/comctl32/tests/propsheet.c |   62 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 73 insertions(+), 20 deletions(-)

diff --git a/dlls/comctl32/propsheet.c b/dlls/comctl32/propsheet.c
index e767444..4759d4c 100644
--- a/dlls/comctl32/propsheet.c
+++ b/dlls/comctl32/propsheet.c
@@ -904,7 +904,7 @@ static BOOL PROPSHEET_AdjustButtons(HWND hwndParent, const PropSheetInfo* psInfo
    */
   hwndButton = GetDlgItem(hwndParent, IDCANCEL);
 
-  x = rcSheet.right - ((padding.x + buttonWidth) * (num_buttons - 1));
+  x += padding.x + buttonWidth;
 
   SetWindowPos(hwndButton, 0, x, y, 0, 0,
                SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
@@ -914,34 +914,25 @@ static BOOL PROPSHEET_AdjustButtons(HWND hwndParent, const PropSheetInfo* psInfo
    */
   hwndButton = GetDlgItem(hwndParent, IDC_APPLY_BUTTON);
 
-  if (psInfo->hasApply)
-  {
-    if (psInfo->hasHelp)
-      x = rcSheet.right - ((padding.x + buttonWidth) * 2);
-    else
-      x = rcSheet.right - (padding.x + buttonWidth);
-
-    SetWindowPos(hwndButton, 0, x, y, 0, 0,
-                 SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
-
-    EnableWindow(hwndButton, FALSE);
-  }
+  if(psInfo->hasApply)
+    x += padding.x + buttonWidth;
   else
     ShowWindow(hwndButton, SW_HIDE);
 
+  SetWindowPos(hwndButton, 0, x, y, 0, 0,
+              SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+  EnableWindow(hwndButton, FALSE);
+
   /*
    * Position Help button.
    */
   hwndButton = GetDlgItem(hwndParent, IDHELP);
 
-  if (psInfo->hasHelp)
-  {
-    x = rcSheet.right - (padding.x + buttonWidth);
+  x += padding.x + buttonWidth;
+  SetWindowPos(hwndButton, 0, x, y, 0, 0,
+              SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
 
-    SetWindowPos(hwndButton, 0, x, y, 0, 0,
-                 SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
-  }
-  else
+  if(!psInfo->hasHelp)
     ShowWindow(hwndButton, SW_HIDE);
 
   return TRUE;
diff --git a/dlls/comctl32/tests/propsheet.c b/dlls/comctl32/tests/propsheet.c
index cf5c201..0eebe33 100644
--- a/dlls/comctl32/tests/propsheet.c
+++ b/dlls/comctl32/tests/propsheet.c
@@ -1,6 +1,7 @@
 /* Unit test suite for property sheet control.
  *
  * Copyright 2006 Huw Davies
+ * Copyright 2009 Jan de Mooij
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -28,6 +29,8 @@ static HWND parent;
 
 static LONG active_page = -1;
 
+#define IDC_APPLY_BUTTON 12321
+
 static int CALLBACK sheet_callback(HWND hwnd, UINT msg, LPARAM lparam)
 {
     switch(msg)
@@ -341,6 +344,64 @@ static void test_wiznavigation(void)
 
     DestroyWindow(hdlg);
 }
+static void test_buttons(void)
+{
+    HPROPSHEETPAGE hpsp[1];
+    PROPSHEETPAGEA psp;
+    PROPSHEETHEADERA psh;
+    HWND hdlg;
+    HWND button;
+    RECT rc;
+    int prevRight, top;
+
+    memset(&psp, 0, sizeof(psp));
+    psp.dwSize = sizeof(psp);
+    psp.dwFlags = 0;
+    psp.hInstance = GetModuleHandleW(NULL);
+    U(psp).pszTemplate = "prop_page1";
+    U2(psp).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();
+    U3(psh).phpage = hpsp;
+    psh.pfnCallback = sheet_callback;
+
+    hdlg = (HWND)PropertySheetA(&psh);
+
+    /* OK button */
+    button = GetDlgItem(hdlg, IDOK);
+    GetWindowRect(button, &rc);
+    prevRight = rc.right;
+    top = rc.top;
+
+    /* Cancel button */
+    button = GetDlgItem(hdlg, IDCANCEL);
+    GetWindowRect(button, &rc);
+    ok(rc.top == top, "Cancel button should have same top as OK button\n");
+    ok(rc.left > prevRight, "Cancel button should be to the right of OK button\n");
+    prevRight = rc.right;
+
+    button = GetDlgItem(hdlg, IDC_APPLY_BUTTON);
+    GetWindowRect(button, &rc);
+    ok(rc.top == top, "Apply button should have same top as OK button\n");
+    ok(rc.left > prevRight, "Apply button should be to the right of Cancel button\n");
+    prevRight = rc.right;
+
+    button = GetDlgItem(hdlg, IDHELP);
+    GetWindowRect(button, &rc);
+    ok(rc.top == top, "Help button should have same top as OK button\n");
+    ok(rc.left > prevRight, "Help button should be to the right of Apply button\n");
+
+    DestroyWindow(hdlg);
+}
 
 START_TEST(propsheet)
 {
@@ -348,4 +409,5 @@ START_TEST(propsheet)
     test_nopage();
     test_disableowner();
     test_wiznavigation();
+    test_buttons();
 }




More information about the wine-cvs mailing list