Huw Davies : comctl32: A change in TBSTYLE_WRAPABLE should produce a recalc.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Apr 28 09:10:40 CDT 2015
Module: wine
Branch: master
Commit: abd673bde93b76a361ddf7342c538c2dd99af2bd
URL: http://source.winehq.org/git/wine.git/?a=commit;h=abd673bde93b76a361ddf7342c538c2dd99af2bd
Author: Huw Davies <huw at codeweavers.com>
Date: Tue Apr 28 11:32:01 2015 +0100
comctl32: A change in TBSTYLE_WRAPABLE should produce a recalc.
---
dlls/comctl32/tests/toolbar.c | 46 +++++++++++++++++++++++++++++++++++++++++--
dlls/comctl32/toolbar.c | 4 +++-
2 files changed, 47 insertions(+), 3 deletions(-)
diff --git a/dlls/comctl32/tests/toolbar.c b/dlls/comctl32/tests/toolbar.c
index d3088f9..365bfe2 100644
--- a/dlls/comctl32/tests/toolbar.c
+++ b/dlls/comctl32/tests/toolbar.c
@@ -1388,12 +1388,12 @@ static void restore_recalc_state(HWND hToolbar)
RECT rect;
/* return to style with a 2px top margin */
SetWindowLongA(hToolbar, GWL_STYLE,
- GetWindowLongA(hToolbar, GWL_STYLE) & ~TBSTYLE_FLAT);
+ SendMessageA(hToolbar, TB_GETSTYLE, 0, 0) & ~TBSTYLE_FLAT);
/* recalc */
SendMessageA(hToolbar, TB_ADDBUTTONSA, 1, (LPARAM)&buttons3[3]);
/* top margin will be 0px if a recalc occurs */
SetWindowLongA(hToolbar, GWL_STYLE,
- GetWindowLongA(hToolbar, GWL_STYLE) | TBSTYLE_FLAT);
+ SendMessageA(hToolbar, TB_GETSTYLE, 0, 0) | TBSTYLE_FLAT);
/* safety check */
SendMessageA(hToolbar, TB_GETITEMRECT, 1, (LPARAM)&rect);
ok(rect.top == 2, "Test will make no sense because initial top is %d instead of 2\n",
@@ -1408,6 +1408,7 @@ static void test_recalc(void)
const int EX_STYLES_COUNT = 5;
int i;
BOOL recalc;
+ DWORD style;
/* Like TB_ADDBUTTONSA tested in test_sized, inserting a button without text
* results in a relayout, while adding one with text forces a recalc */
@@ -1468,6 +1469,47 @@ static void test_recalc(void)
/* undocumented exstyle 0x2 seems to change the top margin, which
* interferes with these tests */
+ /* Show that a change in TBSTYLE_WRAPABLE causes a recalc */
+ prepare_recalc_test(&hToolbar);
+ style = SendMessageA(hToolbar, TB_GETSTYLE, 0, 0);
+ SendMessageA(hToolbar, TB_SETSTYLE, 0, style);
+ recalc = did_recalc(hToolbar);
+ ok(!recalc, "recalc %d\n", recalc);
+
+ SendMessageA(hToolbar, TB_SETSTYLE, 0, style | TBSTYLE_TOOLTIPS | TBSTYLE_TRANSPARENT | CCS_BOTTOM);
+ recalc = did_recalc(hToolbar);
+ ok(!recalc, "recalc %d\n", recalc);
+
+ SendMessageA(hToolbar, TB_SETSTYLE, 0, style | TBSTYLE_WRAPABLE);
+ recalc = did_recalc(hToolbar);
+ ok(recalc, "recalc %d\n", recalc);
+ restore_recalc_state(hToolbar);
+
+ SendMessageA(hToolbar, TB_SETSTYLE, 0, style | TBSTYLE_WRAPABLE);
+ recalc = did_recalc(hToolbar);
+ ok(!recalc, "recalc %d\n", recalc);
+
+ SendMessageA(hToolbar, TB_SETSTYLE, 0, style);
+ recalc = did_recalc(hToolbar);
+ ok(recalc, "recalc %d\n", recalc);
+ restore_recalc_state(hToolbar);
+
+ /* Changing CCS_VERT does not recalc */
+ SendMessageA(hToolbar, TB_SETSTYLE, 0, style | CCS_VERT);
+ recalc = did_recalc(hToolbar);
+ ok(!recalc, "recalc %d\n", recalc);
+ restore_recalc_state(hToolbar);
+
+ SendMessageA(hToolbar, TB_SETSTYLE, 0, style);
+ recalc = did_recalc(hToolbar);
+ ok(!recalc, "recalc %d\n", recalc);
+ restore_recalc_state(hToolbar);
+
+ /* Setting the window's style directly also causes recalc */
+ SetWindowLongA(hToolbar, GWL_STYLE, style | TBSTYLE_WRAPABLE);
+ recalc = did_recalc(hToolbar);
+ ok(recalc, "recalc %d\n", recalc);
+
DestroyWindow(hToolbar);
}
diff --git a/dlls/comctl32/toolbar.c b/dlls/comctl32/toolbar.c
index 695e450..b2f13c5 100644
--- a/dlls/comctl32/toolbar.c
+++ b/dlls/comctl32/toolbar.c
@@ -4934,7 +4934,9 @@ TOOLBAR_SetStyle (TOOLBAR_INFO *infoPtr, DWORD style)
infoPtr->dwStyle = style;
TOOLBAR_CheckStyle(infoPtr);
- if ((dwOldStyle ^ style) & (TBSTYLE_WRAPABLE | CCS_VERT))
+ if ((dwOldStyle ^ style) & TBSTYLE_WRAPABLE)
+ TOOLBAR_CalcToolbar(infoPtr);
+ else if ((dwOldStyle ^ style) & CCS_VERT)
TOOLBAR_LayoutToolbar(infoPtr);
/* only resize if one of the CCS_* styles was changed */
More information about the wine-cvs
mailing list