[2/2] comctl32: Implemented TCM_[G,S]ETEXTENDEDSTYLE and TCS_EX_FLATSEPARATORS style
Nikolay Sivov
bunglehead at gmail.com
Sun Mar 15 04:37:50 CDT 2009
Changelog:
- Implemented TCM_[G,S]ETEXTENDEDSTYLE and TCS_EX_FLATSEPARATORS style
>From 98d4d75f45f602bb72dbee3a361955b78ef73df6 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <bunglehead at gmail.com>
Date: Sun, 15 Mar 2009 05:28:35 -0400
Subject: Implemented TCM_[G,S]ETEXTENDEDSTYLE and TCS_EX_FLATSEPARATORS style
---
dlls/comctl32/tab.c | 49 +++++++++++++++++++++++++++++++++++++-------
dlls/comctl32/tests/tab.c | 4 +--
2 files changed, 42 insertions(+), 11 deletions(-)
diff --git a/dlls/comctl32/tab.c b/dlls/comctl32/tab.c
index 3af09cb..b6c797c 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:
@@ -55,8 +54,6 @@
* Messages:
* TCM_REMOVEIMAGE
* TCM_DESELECTALL
- * TCM_GETEXTENDEDSTYLE
- * TCM_SETEXTENDEDSTYLE
*
* Macros:
* TabCtrl_AdjustRect
@@ -127,6 +124,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;
/******************************************************************************
@@ -1948,7 +1948,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);
@@ -2979,6 +2979,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 =
@@ -3099,6 +3101,39 @@ TAB_SetItemExtra (TAB_INFO *infoPtr, INT cbInfo)
return TRUE;
}
+static inline LRESULT
+TAB_GetExtendedStyle (TAB_INFO *infoPtr)
+{
+ return infoPtr->exStyle;
+}
+
+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 LRESULT WINAPI
TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
@@ -3197,12 +3232,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 4b1c7f4..4bf234b 100644
--- a/dlls/comctl32/tests/tab.c
+++ b/dlls/comctl32/tests/tab.c
@@ -771,9 +771,7 @@ static void test_getters_setters(HWND parent_wnd, INT nTabs)
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);
--
1.5.6.5
More information about the wine-patches
mailing list