Lei Zhang : comctl32: listview: Prevent DragDetect from removing WM_LBUTTONUP messages.

Alexandre Julliard julliard at winehq.org
Thu Sep 11 08:01:03 CDT 2008


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

Author: Lei Zhang <thestig at google.com>
Date:   Wed Sep 10 16:43:43 2008 -0700

comctl32: listview: Prevent DragDetect from removing WM_LBUTTONUP messages.

---

 dlls/comctl32/listview.c |   32 ++++++++++++++++++++++----------
 1 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index 35fd131..ba53434 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -3321,21 +3321,33 @@ static LRESULT LISTVIEW_MouseMove(LISTVIEW_INFO *infoPtr, WORD fwKeys, INT x, IN
     if (!(fwKeys & MK_LBUTTON))
         infoPtr->bLButtonDown = FALSE;
 
-    if (infoPtr->bLButtonDown && DragDetect(infoPtr->hwndSelf, infoPtr->ptClickPos))
+    if (infoPtr->bLButtonDown)
     {
-        LVHITTESTINFO lvHitTestInfo;
-        NMLISTVIEW nmlv;
+        MSG msg;
+        BOOL skip = FALSE;
+        /* Check to see if we got a WM_LBUTTONUP, and skip the DragDetect.
+         * Otherwise, DragDetect will eat it.
+         */
+        if (PeekMessageW(&msg, 0, WM_MOUSEFIRST, WM_MOUSELAST, PM_NOREMOVE))
+            if (msg.message == WM_LBUTTONUP)
+                skip = TRUE;
+
+        if (!skip && DragDetect(infoPtr->hwndSelf, infoPtr->ptClickPos))
+        {
+            LVHITTESTINFO lvHitTestInfo;
+            NMLISTVIEW nmlv;
 
-        lvHitTestInfo.pt = infoPtr->ptClickPos;
-        LISTVIEW_HitTest(infoPtr, &lvHitTestInfo, TRUE, TRUE);
+            lvHitTestInfo.pt = infoPtr->ptClickPos;
+            LISTVIEW_HitTest(infoPtr, &lvHitTestInfo, TRUE, TRUE);
 
-        ZeroMemory(&nmlv, sizeof(nmlv));
-        nmlv.iItem = lvHitTestInfo.iItem;
-        nmlv.ptAction = infoPtr->ptClickPos;
+            ZeroMemory(&nmlv, sizeof(nmlv));
+            nmlv.iItem = lvHitTestInfo.iItem;
+            nmlv.ptAction = infoPtr->ptClickPos;
 
-        notify_listview(infoPtr, LVN_BEGINDRAG, &nmlv);
+            notify_listview(infoPtr, LVN_BEGINDRAG, &nmlv);
 
-        return 0;
+            return 0;
+        }
     }
     else
         infoPtr->bLButtonDown = FALSE;




More information about the wine-cvs mailing list