From 518f4699708e6773641f7fde1ae7064d28480b4c Mon Sep 17 00:00:00 2001 From: Dov Alperin Date: Mon, 6 Jan 2020 17:58:08 -0500 Subject: [PATCH] LibGUI: clicking and dragging one item will drag other items in selection Previously if more than one item was selected clicking on one of them and dragging would de-select everything that is not the one that was clicked on. Now, if more than one items are selected and there is a mousedown it goes into a "mightdrag" state. The user can then perform a drag, if they don't everything that is not the item being clicked gets unselected in the mouseup event, mimicking the previous behavior. --- Libraries/LibGUI/GItemView.cpp | 8 ++++++++ Libraries/LibGUI/GItemView.h | 2 ++ 2 files changed, 10 insertions(+) diff --git a/Libraries/LibGUI/GItemView.cpp b/Libraries/LibGUI/GItemView.cpp index e4fd104400c..8f025c06099 100644 --- a/Libraries/LibGUI/GItemView.cpp +++ b/Libraries/LibGUI/GItemView.cpp @@ -130,6 +130,8 @@ void GItemView::mousedown_event(GMouseEvent& event) auto index = model()->index(item_index, m_model_column); if (event.modifiers() & Mod_Ctrl) selection().toggle(index); + else if (selection().size() > 1) + m_might_drag = true; else selection().set(index); } @@ -146,6 +148,12 @@ void GItemView::mouseup_event(GMouseEvent& event) update(); return; } + int item_index = item_at_event_position(event.position()); + auto index = model()->index(item_index, m_model_column); + if((selection().size() > 1) & m_might_drag) { + selection().set(index); + m_might_drag = false; + } GAbstractView::mouseup_event(event); } diff --git a/Libraries/LibGUI/GItemView.h b/Libraries/LibGUI/GItemView.h index 25986d5ea16..ee81ab87d0f 100644 --- a/Libraries/LibGUI/GItemView.h +++ b/Libraries/LibGUI/GItemView.h @@ -48,6 +48,8 @@ private: int m_visual_column_count { 0 }; int m_visual_row_count { 0 }; + bool m_might_drag { false }; + Point m_left_mousedown_position; Size m_effective_item_size { 80, 80 };