From 92b0ad98e128a7281120c3cc92b38e2f11bf3645 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Mon, 23 Mar 2009 16:00:04 -0400 Subject: [PATCH] comctl32/tab: Implement TCM_[G,S]ETEXTENDEDSTYLE and TCS_EX_FLATSEPARATORS style. --- dlls/comctl32/tab.c | 49 ++++++++++++++++++++++++++++++++------- dlls/comctl32/tests/tab.c | 6 ++--- 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/dlls/comctl32/tab.c b/dlls/comctl32/tab.c index b8f638d7523..3a0e477a8f0 100644 --- a/dlls/comctl32/tab.c +++ b/dlls/comctl32/tab.c @@ -40,7 +40,6 @@ * TCIF_RTLREADING * * Extended Styles: - * TCS_EX_FLATSEPARATORS * TCS_EX_REGISTERDROP * * States: @@ -54,8 +53,6 @@ * * Messages: * TCM_DESELECTALL - * TCM_GETEXTENDEDSTYLE - * TCM_SETEXTENDEDSTYLE * * Macros: * TabCtrl_AdjustRect @@ -126,6 +123,9 @@ typedef struct BOOL bUnicode; /* Unicode control? */ HWND hwndUpDown; /* Updown control used for scrolling */ INT cbInfo; /* Number of bytes of caller supplied info per tab */ + + DWORD exStyle; /* Extended style used, currently: + TCS_EX_FLATSEPARATORS, TCS_EX_REGISTERDROP */ } TAB_INFO; /****************************************************************************** @@ -1947,7 +1947,7 @@ static void TAB_DrawItem(const TAB_INFO *infoPtr, HDC hdc, INT iItem) r = itemRect; /* Separators between flat buttons */ - if (lStyle & TCS_FLATBUTTONS) + if ((lStyle & TCS_FLATBUTTONS) && (infoPtr->exStyle & TCS_EX_FLATSEPARATORS)) { r1 = r; r1.right += (FLAT_BTN_SPACINGX -2); @@ -2978,6 +2978,8 @@ static LRESULT TAB_Create (HWND hwnd, LPARAM lParam) dwStyle = GetWindowLongW(hwnd, GWL_STYLE); SetWindowLongW(hwnd, GWL_STYLE, dwStyle|WS_CLIPSIBLINGS); + infoPtr->exStyle = (dwStyle & TCS_FLATBUTTONS) ? TCS_EX_FLATSEPARATORS : 0; + if (dwStyle & TCS_TOOLTIPS) { /* Create tooltip control */ infoPtr->hwndToolTip = @@ -3129,6 +3131,39 @@ static LRESULT TAB_RemoveImage (TAB_INFO *infoPtr, INT image) return 0; } +static LRESULT +TAB_SetExtendedStyle (TAB_INFO *infoPtr, DWORD exMask, DWORD exStyle) +{ + DWORD prevstyle = infoPtr->exStyle; + + /* zero mask means all styles */ + if (exMask == 0) exMask = ~0; + + if (exMask & TCS_EX_REGISTERDROP) + { + FIXME("TCS_EX_REGISTERDROP style unimplemented\n"); + exMask &= ~TCS_EX_REGISTERDROP; + exStyle &= ~TCS_EX_REGISTERDROP; + } + + if (exMask & TCS_EX_FLATSEPARATORS) + { + if ((prevstyle ^ exStyle) & TCS_EX_FLATSEPARATORS) + { + infoPtr->exStyle ^= TCS_EX_FLATSEPARATORS; + TAB_InvalidateTabArea(infoPtr); + } + } + + return prevstyle; +} + +static inline LRESULT +TAB_GetExtendedStyle (TAB_INFO *infoPtr) +{ + return infoPtr->exStyle; +} + static LRESULT WINAPI TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { @@ -3226,12 +3261,10 @@ TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) return 0; case TCM_GETEXTENDEDSTYLE: - FIXME("Unimplemented msg TCM_GETEXTENDEDSTYLE\n"); - return 0; + return TAB_GetExtendedStyle (infoPtr); case TCM_SETEXTENDEDSTYLE: - FIXME("Unimplemented msg TCM_SETEXTENDEDSTYLE\n"); - return 0; + return TAB_SetExtendedStyle (infoPtr, wParam, lParam); case WM_GETFONT: return TAB_GetFont (infoPtr); diff --git a/dlls/comctl32/tests/tab.c b/dlls/comctl32/tests/tab.c index daef97ff18f..d24d0972988 100644 --- a/dlls/comctl32/tests/tab.c +++ b/dlls/comctl32/tests/tab.c @@ -768,12 +768,10 @@ static void test_getters_setters(HWND parent_wnd, INT nTabs) /* Testing Flat Separators */ extendedStyle = SendMessage(hTab, TCM_GETEXTENDEDSTYLE, 0, 0); prevExtendedStyle = SendMessage(hTab, TCM_SETEXTENDEDSTYLE, 0, TCS_EX_FLATSEPARATORS); - expect(extendedStyle, prevExtendedStyle); + expect(extendedStyle, prevExtendedStyle); extendedStyle = SendMessage(hTab, TCM_GETEXTENDEDSTYLE, 0, 0); - todo_wine{ - expect(TCS_EX_FLATSEPARATORS, extendedStyle); - } + expect(TCS_EX_FLATSEPARATORS, extendedStyle); /* Testing Register Drop */ prevExtendedStyle = SendMessage(hTab, TCM_SETEXTENDEDSTYLE, 0, TCS_EX_REGISTERDROP);