diff --git a/controls/listbox.c b/controls/listbox.c index 4d6b39a4211..03362a2b559 100644 --- a/controls/listbox.c +++ b/controls/listbox.c @@ -1887,6 +1887,12 @@ static LRESULT LISTBOX_HandleLButtonDown( WND *wnd, LB_DESCR *descr, { if (descr->style & LBS_EXTENDEDSEL) { + /* we should perhaps make sure that all items are deselected + FIXME: needed for !LBS_EXTENDEDSEL, too ? + if (!(wParam & (MK_SHIFT|MK_CONTROL))) + LISTBOX_SetSelection( wnd, descr, -1, FALSE, FALSE); + */ + if (!(wParam & MK_SHIFT)) descr->anchor_item = index; if (wParam & MK_CONTROL) { diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c index 8e7fe564f58..35a926aba2f 100644 --- a/dlls/comctl32/listview.c +++ b/dlls/comctl32/listview.c @@ -7887,16 +7887,16 @@ static LRESULT LISTVIEW_LButtonDown(HWND hwnd, WORD wKey, WORD wPosX, } else { - if (ListView_GetItemState(hwnd, nItem, LVIS_SELECTED) & LVIS_SELECTED - && infoPtr->nEditLabelItem == -1) + BOOL was_selected = + (ListView_GetItemState(hwnd, nItem, LVIS_SELECTED) & LVIS_SELECTED); + + /* set selection (clears other pre-existing selections) */ + LISTVIEW_SetSelection(hwnd, nItem); + + if (was_selected && infoPtr->nEditLabelItem == -1) { infoPtr->nEditLabelItem = nItem; } - else - { - LISTVIEW_SetSelection(hwnd, nItem); - } - } } }