Nikolay Sivov : comctl32/button: Fix dialog code for new button types.

Alexandre Julliard julliard at winehq.org
Wed Feb 7 15:24:27 CST 2018


Module: wine
Branch: master
Commit: bf152cb0cc7b3ee73c4a81835761d52de42d90e7
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=bf152cb0cc7b3ee73c4a81835761d52de42d90e7

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Wed Feb  7 16:13:09 2018 +0300

comctl32/button: Fix dialog code for new button types.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/comctl32/button.c       |  4 ++++
 dlls/comctl32/tests/button.c | 28 ++++++++++++++++++++++++++--
 2 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/dlls/comctl32/button.c b/dlls/comctl32/button.c
index b0eea99..a39a64c 100644
--- a/dlls/comctl32/button.c
+++ b/dlls/comctl32/button.c
@@ -237,12 +237,16 @@ static LRESULT CALLBACK BUTTON_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, L
     case WM_GETDLGCODE:
         switch(btn_type)
         {
+        case BS_COMMANDLINK:
         case BS_USERBUTTON:
         case BS_PUSHBUTTON:      return DLGC_BUTTON | DLGC_UNDEFPUSHBUTTON;
+        case BS_DEFCOMMANDLINK:
         case BS_DEFPUSHBUTTON:   return DLGC_BUTTON | DLGC_DEFPUSHBUTTON;
         case BS_RADIOBUTTON:
         case BS_AUTORADIOBUTTON: return DLGC_BUTTON | DLGC_RADIOBUTTON;
         case BS_GROUPBOX:        return DLGC_STATIC;
+        case BS_SPLITBUTTON:     return DLGC_BUTTON | DLGC_UNDEFPUSHBUTTON | DLGC_WANTARROWS;
+        case BS_DEFSPLITBUTTON:  return DLGC_BUTTON | DLGC_DEFPUSHBUTTON | DLGC_WANTARROWS;
         default:                 return DLGC_BUTTON;
         }
 
diff --git a/dlls/comctl32/tests/button.c b/dlls/comctl32/tests/button.c
index 38e55c8..425e145 100644
--- a/dlls/comctl32/tests/button.c
+++ b/dlls/comctl32/tests/button.c
@@ -511,6 +511,18 @@ static void test_button_messages(void)
         { BS_OWNERDRAW, DLGC_BUTTON,
           setfocus_ownerdraw_seq, killfocus_ownerdraw_seq, setstyle_ownerdraw_seq,
           setstate_ownerdraw_seq, clearstate_ownerdraw_seq, setcheck_ignored_seq },
+        { BS_SPLITBUTTON, DLGC_BUTTON | DLGC_UNDEFPUSHBUTTON | DLGC_WANTARROWS,
+          setfocus_seq, killfocus_seq, setstyle_seq,
+          setstate_seq, setstate_seq, setcheck_ignored_seq },
+        { BS_DEFSPLITBUTTON, DLGC_BUTTON | DLGC_DEFPUSHBUTTON | DLGC_WANTARROWS,
+          setfocus_seq, killfocus_seq, setstyle_seq,
+          setstate_seq, setstate_seq, setcheck_ignored_seq },
+        { BS_COMMANDLINK, DLGC_BUTTON | DLGC_UNDEFPUSHBUTTON,
+          setfocus_seq, killfocus_seq, setstyle_seq,
+          setstate_seq, setstate_seq, setcheck_ignored_seq },
+        { BS_DEFCOMMANDLINK, DLGC_BUTTON | DLGC_DEFPUSHBUTTON,
+          setfocus_seq, killfocus_seq, setstyle_seq,
+          setstate_seq, setstate_seq, setcheck_ignored_seq },
     };
     const struct message *seq;
     unsigned int i;
@@ -550,7 +562,15 @@ static void test_button_messages(void)
             ok(style == button[i].style, "expected style %x got %x\n", button[i].style, style);
 
         dlg_code = SendMessageA(hwnd, WM_GETDLGCODE, 0, 0);
-        ok(dlg_code == button[i].dlg_code, "%u: wrong dlg_code %08x\n", i, dlg_code);
+        if (button[i].style == BS_SPLITBUTTON ||
+                button[i].style == BS_DEFSPLITBUTTON ||
+                button[i].style == BS_COMMANDLINK ||
+                button[i].style == BS_DEFCOMMANDLINK)
+        {
+            ok(dlg_code == button[i].dlg_code || broken(dlg_code == DLGC_BUTTON) /* WinXP */, "%u: wrong dlg_code %08x\n", i, dlg_code);
+        }
+        else
+            ok(dlg_code == button[i].dlg_code, "%u: wrong dlg_code %08x\n", i, dlg_code);
 
         ShowWindow(hwnd, SW_SHOW);
         UpdateWindow(hwnd);
@@ -650,7 +670,11 @@ static void test_button_messages(void)
             button[i].style == BS_DEFPUSHBUTTON ||
             button[i].style == BS_GROUPBOX ||
             button[i].style == BS_USERBUTTON ||
-            button[i].style == BS_OWNERDRAW)
+            button[i].style == BS_OWNERDRAW ||
+            button[i].style == BS_SPLITBUTTON ||
+            button[i].style == BS_DEFSPLITBUTTON ||
+            button[i].style == BS_COMMANDLINK ||
+            button[i].style == BS_DEFCOMMANDLINK)
         {
             ok_sequence(sequences, COMBINED_SEQ_INDEX, button[i].setcheck, "BM_SETCHECK on a button", FALSE);
             state = SendMessageA(hwnd, BM_GETCHECK, 0, 0);




More information about the wine-cvs mailing list