Module: wine Branch: master Commit: 92b0ad98e128a7281120c3cc92b38e2f11bf3645 URL: http://source.winehq.org/git/wine.git/?a=commit;h=92b0ad98e128a7281120c3cc92...
Author: Nikolay Sivov bunglehead@gmail.com Date: Mon Mar 23 16:00:04 2009 -0400
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 b8f638d..3a0e477 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 daef97f..d24d097 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);