Module: wine Branch: master Commit: 21727c416fa4fafc5a7351e95ef4fe369445b9a3 URL: http://source.winehq.org/git/wine.git/?a=commit;h=21727c416fa4fafc5a7351e95e...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Thu May 17 10:53:45 2012 +0400
comctl32: When created with TCS_VERTICAL, TCS_MULTILINE is set automatically.
---
dlls/comctl32/tab.c | 12 +++++++----- dlls/comctl32/tests/tab.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 5 deletions(-)
diff --git a/dlls/comctl32/tab.c b/dlls/comctl32/tab.c index f00ecd3..43d8cdf 100644 --- a/dlls/comctl32/tab.c +++ b/dlls/comctl32/tab.c @@ -3020,7 +3020,7 @@ static LRESULT TAB_Create (HWND hwnd, LPARAM lParam) TEXTMETRICW fontMetrics; HDC hdc; HFONT hOldFont; - DWORD dwStyle; + DWORD style;
infoPtr = Alloc (sizeof(TAB_INFO));
@@ -3054,11 +3054,13 @@ static LRESULT TAB_Create (HWND hwnd, LPARAM lParam) /* The tab control always has the WS_CLIPSIBLINGS style. Even if you don't specify it in CreateWindow. This is necessary in order for paint to work correctly. This follows windows behaviour. */ - dwStyle = GetWindowLongW(hwnd, GWL_STYLE); - SetWindowLongW(hwnd, GWL_STYLE, dwStyle|WS_CLIPSIBLINGS); + style = GetWindowLongW(hwnd, GWL_STYLE); + if (style & TCS_VERTICAL) style |= TCS_MULTILINE; + style |= WS_CLIPSIBLINGS; + SetWindowLongW(hwnd, GWL_STYLE, style);
- infoPtr->dwStyle = dwStyle | WS_CLIPSIBLINGS; - infoPtr->exStyle = (dwStyle & TCS_FLATBUTTONS) ? TCS_EX_FLATSEPARATORS : 0; + infoPtr->dwStyle = style; + infoPtr->exStyle = (style & TCS_FLATBUTTONS) ? TCS_EX_FLATSEPARATORS : 0;
if (infoPtr->dwStyle & TCS_TOOLTIPS) { /* Create tooltip control */ diff --git a/dlls/comctl32/tests/tab.c b/dlls/comctl32/tests/tab.c index 36179dc..0166778 100644 --- a/dlls/comctl32/tests/tab.c +++ b/dlls/comctl32/tests/tab.c @@ -1428,6 +1428,36 @@ static void test_WM_CONTEXTMENU(void) DestroyWindow(hTab); }
+struct tabcreate_style { + DWORD style; + DWORD act_style; +}; + +static const struct tabcreate_style create_styles[] = +{ + { WS_CHILD|TCS_BOTTOM|TCS_VERTICAL, WS_CHILD|WS_CLIPSIBLINGS|TCS_BOTTOM|TCS_VERTICAL|TCS_MULTILINE }, + { WS_CHILD|TCS_VERTICAL, WS_CHILD|WS_CLIPSIBLINGS|TCS_VERTICAL|TCS_MULTILINE }, + { 0 } +}; + +static void test_create(void) +{ + const struct tabcreate_style *ptr = create_styles; + DWORD style; + HWND hTab; + + while (ptr->style) + { + hTab = CreateWindowA(WC_TABCONTROLA, "TestTab", ptr->style, + 10, 10, 300, 100, parent_wnd, NULL, NULL, 0); + style = GetWindowLongA(hTab, GWL_STYLE); + ok(style == ptr->act_style, "expected style 0x%08x, got style 0x%08x\n", ptr->act_style, style); + + DestroyWindow(hTab); + ptr++; + } +} + START_TEST(tab) { LOGFONTA logfont; @@ -1465,6 +1495,7 @@ START_TEST(tab) test_TCM_SETITEMEXTRA(); test_TCS_OWNERDRAWFIXED(); test_WM_CONTEXTMENU(); + test_create();
DestroyWindow(parent_wnd); }