Module: wine Branch: stable Commit: 12bf89b30b25585e76f8f3064ccea517cf708117 URL: http://source.winehq.org/git/wine.git/?a=commit;h=12bf89b30b25585e76f8f3064c...
Author: Nikolay Sivov nsivov@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org (cherry picked from commit 0220d47c0293545a60dea87af7383edee2fc0000) Signed-off-by: Michael Stefaniuc mstefani@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;