From e3cdbb5dd0c160632f52996c6fd936e905580cbc Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Wed, 10 Sep 2008 16:43:43 -0700 Subject: [PATCH 1/2] 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; -- 1.5.4.5