From a7533eb29cfea6f160a90f58205b8caf93f49d23 Mon Sep 17 00:00:00 2001 From: Tom Date: Mon, 5 Oct 2020 20:32:21 -0600 Subject: [PATCH] LibGUI: Clear selection if right-clicking item that isn't selected If we're right-clicking on an item that isn't currently selected, clear the selection first. Fixes #3665 --- Libraries/LibGUI/AbstractView.cpp | 8 +++++++- Libraries/LibGUI/AbstractView.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Libraries/LibGUI/AbstractView.cpp b/Libraries/LibGUI/AbstractView.cpp index 8daaba7721..1b2d43e1ba 100644 --- a/Libraries/LibGUI/AbstractView.cpp +++ b/Libraries/LibGUI/AbstractView.cpp @@ -224,7 +224,9 @@ void AbstractView::mousedown_event(MouseEvent& event) } else if (event.button() == MouseButton::Left && m_selection.contains(index) && !m_model->drag_data_type().is_null()) { // We might be starting a drag, so don't throw away other selected items yet. m_might_drag = true; - } else if (event.button() != MouseButton::Right) { + } else if (event.button() == MouseButton::Right) { + set_cursor(index, SelectionUpdate::ClearIfNotSelected); + } else { set_cursor(index, SelectionUpdate::Set); } @@ -427,6 +429,10 @@ void AbstractView::set_cursor(ModelIndex index, SelectionUpdate selection_update set_selection(index); else if (selection_update == SelectionUpdate::Ctrl) toggle_selection(index); + else if (selection_update == SelectionUpdate::ClearIfNotSelected) { + if (!m_selection.contains(index)) + clear_selection(); + } // FIXME: Support the other SelectionUpdate types diff --git a/Libraries/LibGUI/AbstractView.h b/Libraries/LibGUI/AbstractView.h index c409ca456d..fd3ec89f50 100644 --- a/Libraries/LibGUI/AbstractView.h +++ b/Libraries/LibGUI/AbstractView.h @@ -52,6 +52,7 @@ public: Set, Shift, Ctrl, + ClearIfNotSelected }; virtual void move_cursor(CursorMovement, SelectionUpdate) { }