Nikolay Sivov : comctl32/tab: Handle state mask in TCM_[G,S]ETITEM.

Alexandre Julliard julliard at winehq.org
Thu Mar 26 11:05:45 CDT 2009


Module: wine
Branch: master
Commit: db60f69cba70795a43e557b0c96890a2f2e6d8e5
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=db60f69cba70795a43e557b0c96890a2f2e6d8e5

Author: Nikolay Sivov <bunglehead at gmail.com>
Date:   Wed Mar 25 17:39:11 2009 -0400

comctl32/tab: Handle state mask in TCM_[G,S]ETITEM.

---

 dlls/comctl32/tab.c       |    5 +++--
 dlls/comctl32/tests/tab.c |   23 +++++++++++++++++++++++
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/dlls/comctl32/tab.c b/dlls/comctl32/tab.c
index 800857f..ac81016 100644
--- a/dlls/comctl32/tab.c
+++ b/dlls/comctl32/tab.c
@@ -2719,7 +2719,8 @@ TAB_SetItemT (TAB_INFO *infoPtr, INT iItem, LPTCITEMW tabItem, BOOL bUnicode)
     FIXME("TCIF_RTLREADING\n");
 
   if (tabItem->mask & TCIF_STATE)
-    wineItem->dwState = tabItem->dwState;
+    wineItem->dwState = (wineItem->dwState & ~tabItem->dwStateMask) |
+                        ( tabItem->dwState &  tabItem->dwStateMask);
 
   if (tabItem->mask & TCIF_TEXT)
   {
@@ -2766,7 +2767,7 @@ TAB_GetItemT (TAB_INFO *infoPtr, INT iItem, LPTCITEMW tabItem, BOOL bUnicode)
     FIXME("TCIF_RTLREADING\n");
 
   if (tabItem->mask & TCIF_STATE)
-    tabItem->dwState = wineItem->dwState;
+    tabItem->dwState = wineItem->dwState & tabItem->dwStateMask;
 
   if (tabItem->mask & TCIF_TEXT)
   {
diff --git a/dlls/comctl32/tests/tab.c b/dlls/comctl32/tests/tab.c
index d24d097..5f5e4b9 100644
--- a/dlls/comctl32/tests/tab.c
+++ b/dlls/comctl32/tests/tab.c
@@ -831,6 +831,29 @@ static void test_getters_setters(HWND parent_wnd, INT nTabs)
 
         ok_sequence(sequences, TAB_SEQ_INDEX, getset_item_seq, "Getset item test sequence", FALSE);
         ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Getset item test parent sequence", FALSE);
+
+        /* TCIS_BUTTONPRESSED doesn't depend on tab style */
+        memset(&tcItem, 0, sizeof(tcItem));
+        tcItem.mask = TCIF_STATE;
+        tcItem.dwStateMask = TCIS_BUTTONPRESSED;
+        tcItem.dwState = TCIS_BUTTONPRESSED;
+        ok ( SendMessage(hTab, TCM_SETITEM, 0, (LPARAM) &tcItem), "Setting new item failed.\n");
+        tcItem.dwState = 0;
+        ok ( SendMessage(hTab, TCM_GETITEM, 0, (LPARAM) &tcItem), "Getting item failed.\n");
+        ok (tcItem.dwState == TCIS_BUTTONPRESSED, "TCIS_BUTTONPRESSED should be set.\n");
+        /* next highlight item, test that dwStateMask actually masks */
+        tcItem.mask = TCIF_STATE;
+        tcItem.dwStateMask = TCIS_HIGHLIGHTED;
+        tcItem.dwState = TCIS_HIGHLIGHTED;
+        ok ( SendMessage(hTab, TCM_SETITEM, 0, (LPARAM) &tcItem), "Setting new item failed.\n");
+        tcItem.dwState = 0;
+        ok ( SendMessage(hTab, TCM_GETITEM, 0, (LPARAM) &tcItem), "Getting item failed.\n");
+        ok (tcItem.dwState == TCIS_HIGHLIGHTED, "TCIS_HIGHLIGHTED should be set.\n");
+        tcItem.mask = TCIF_STATE;
+        tcItem.dwStateMask = TCIS_BUTTONPRESSED;
+        tcItem.dwState = 0;
+        ok ( SendMessage(hTab, TCM_GETITEM, 0, (LPARAM) &tcItem), "Getting item failed.\n");
+        ok (tcItem.dwState == TCIS_BUTTONPRESSED, "TCIS_BUTTONPRESSED should be set.\n");
     }
 
     /* Testing GetSet ToolTip */




More information about the wine-cvs mailing list