Nikolay Sivov : comctl32/treeview: Fix hot-tracking with TVS_FULLROWSELECT.
Alexandre Julliard
julliard at winehq.org
Mon Aug 8 11:09:29 CDT 2016
Module: wine
Branch: master
Commit: 0220d47c0293545a60dea87af7383edee2fc0000
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0220d47c0293545a60dea87af7383edee2fc0000
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>
---
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 6540fdb..dc31a9b 100644
--- a/dlls/comctl32/treeview.c
+++ b/dlls/comctl32/treeview.c
@@ -353,6 +353,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 *******************************************************/
@@ -5334,6 +5348,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;
@@ -5362,12 +5377,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 */
@@ -5532,7 +5548,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