Nikolay Sivov : comctl32/treeview: Fix hot-tracking with TVS_FULLROWSELECT.

Alexandre Julliard julliard at winehq.org
Fri Oct 7 15:09:15 CDT 2016


Module: wine
Branch: stable
Commit: 12bf89b30b25585e76f8f3064ccea517cf708117
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=12bf89b30b25585e76f8f3064ccea517cf708117

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Mon Aug  8 10:57:16 2016 +0300

comctl32/treeview: Fix hot-tracking with TVS_FULLROWSELECT.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 0220d47c0293545a60dea87af7383edee2fc0000)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 dlls/comctl32/treeview.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/dlls/comctl32/treeview.c b/dlls/comctl32/treeview.c
index 453150f..d33a783 100644
--- a/dlls/comctl32/treeview.c
+++ b/dlls/comctl32/treeview.c
@@ -350,6 +350,20 @@ TREEVIEW_IsChildOf(const TREEVIEW_ITEM *parent, const TREEVIEW_ITEM *child)
     return FALSE;
 }
 
+static BOOL
+TREEVIEW_IsFullRowSelect(const TREEVIEW_INFO *infoPtr)
+{
+    return !(infoPtr->dwStyle & TVS_HASLINES) && (infoPtr->dwStyle & TVS_FULLROWSELECT);
+}
+
+static BOOL
+TREEVIEW_IsItemHit(const TREEVIEW_INFO *infoPtr, const TVHITTESTINFO *ht)
+{
+    if (TREEVIEW_IsFullRowSelect(infoPtr))
+        return ht->flags & (TVHT_ONITEMINDENT | TVHT_ONITEMBUTTON | TVHT_ONITEM | TVHT_ONITEMRIGHT);
+    else
+        return ht->flags & TVHT_ONITEM;
+}
 
 /* Tree Traversal *******************************************************/
 
@@ -5328,6 +5342,7 @@ TREEVIEW_MouseMove (TREEVIEW_INFO * infoPtr, LPARAM lParam)
     TRACKMOUSEEVENT trackinfo;
     TREEVIEW_ITEM * item;
     TVHITTESTINFO ht;
+    BOOL item_hit;
 
     if (!(infoPtr->dwStyle & TVS_TRACKSELECT)) return 0;
 
@@ -5356,12 +5371,13 @@ TREEVIEW_MouseMove (TREEVIEW_INFO * infoPtr, LPARAM lParam)
     ht.pt.y = (short)HIWORD(lParam);
 
     item = TREEVIEW_HitTest(infoPtr, &ht);
-    if ((item != infoPtr->hotItem) || !(ht.flags & TVHT_ONITEM))
+    item_hit = TREEVIEW_IsItemHit(infoPtr, &ht);
+    if ((item != infoPtr->hotItem) || !item_hit)
     {
         /* redraw old hot item */
         TREEVIEW_InvalidateItem(infoPtr, infoPtr->hotItem);
         infoPtr->hotItem = NULL;
-        if (item && (ht.flags & TVHT_ONITEM))
+        if (item && item_hit)
         {
             infoPtr->hotItem = item;
             /* redraw new hot item */
@@ -5526,7 +5542,7 @@ TREEVIEW_SetCursor(const TREEVIEW_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
     if (TREEVIEW_SendRealNotify(infoPtr, NM_SETCURSOR, &nmmouse.hdr))
         return 0;
 
-    if (item && (infoPtr->dwStyle & TVS_TRACKSELECT) && (ht.flags & TVHT_ONITEM))
+    if (item && (infoPtr->dwStyle & TVS_TRACKSELECT) && TREEVIEW_IsItemHit(infoPtr, &ht))
     {
         SetCursor(infoPtr->hcurHand);
         return 0;




More information about the wine-cvs mailing list