[2/2] comctl32/header: Always release item down state on WM_LBUTTONUP

Nikolay Sivov bunglehead at gmail.com
Tue Jun 30 17:05:35 CDT 2009


This bug became visible after one of my recent ListView patches
blocked header reordering.
It's very easy to reproduce: just press header item and try to drag,
it dragging is blocked you'll get pressed item after mouse released.

Changelog:
    - Always release item down state on WM_LBUTTONUP

>From d9342801467d62c50fcfd404f3608ad72b20180f Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <bunglehead at gmail.com>
Date: Wed, 1 Jul 2009 01:33:29 +0400
Subject: Always release item down state on WM_LBUTTONUP

---
 dlls/comctl32/header.c |   12 +++++++-----
 1 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/dlls/comctl32/header.c b/dlls/comctl32/header.c
index 1486a8a..ddc9cb0 100644
--- a/dlls/comctl32/header.c
+++ b/dlls/comctl32/header.c
@@ -1590,6 +1590,9 @@ HEADER_LButtonUp (HEADER_INFO *infoPtr, INT x, INT y)
     HEADER_InternalHitTest (infoPtr, &pt, &flags, &nItem);
 
     if (infoPtr->bPressed) {
+
+	infoPtr->items[infoPtr->iMoveItem].bDown = FALSE;
+
 	if (infoPtr->bDragging)
 	{
             HEADER_ITEM *lpItem = &infoPtr->items[infoPtr->iMoveItem];
@@ -1597,8 +1600,7 @@ HEADER_LButtonUp (HEADER_INFO *infoPtr, INT x, INT y)
             
 	    ImageList_DragShowNolock(FALSE);
 	    ImageList_EndDrag();
-            lpItem->bDown=FALSE;
-            
+
             if (infoPtr->iHotDivider == -1)
                 iNewOrder = -1;
             else if (infoPtr->iHotDivider == infoPtr->uNumItem)
@@ -1623,14 +1625,14 @@ HEADER_LButtonUp (HEADER_INFO *infoPtr, INT x, INT y)
             infoPtr->bDragging = FALSE;
             HEADER_SetHotDivider(infoPtr, FALSE, -1);
 	}
-	else if (!(infoPtr->dwStyle & HDS_DRAGDROP) || !HEADER_IsDragDistance(infoPtr, &pt))
+	else
 	{
-	    infoPtr->items[infoPtr->iMoveItem].bDown = FALSE;
 	    hdc = GetDC (infoPtr->hwndSelf);
 	    HEADER_RefreshItem (infoPtr, infoPtr->iMoveItem);
 	    ReleaseDC (infoPtr->hwndSelf, hdc);
 
-	    HEADER_SendNotifyWithHDItemT(infoPtr, HDN_ITEMCLICKW, infoPtr->iMoveItem, NULL);
+	    if (!(infoPtr->dwStyle & HDS_DRAGDROP) || !HEADER_IsDragDistance(infoPtr, &pt))
+		HEADER_SendNotifyWithHDItemT(infoPtr, HDN_ITEMCLICKW, infoPtr->iMoveItem, NULL);
 	}
 
 	TRACE("Released item %d!\n", infoPtr->iMoveItem);
-- 
1.5.6.5







More information about the wine-patches mailing list