]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Always select items on activation
authorFelix Ernst <fe.a.ernst@gmail.com>
Fri, 4 Mar 2022 10:41:50 +0000 (10:41 +0000)
committerFelix Ernst <fe.a.ernst@gmail.com>
Fri, 4 Mar 2022 10:41:50 +0000 (10:41 +0000)
There is an unintended side-effect in
d3839617193e92463806580699caa595c892b8a6 which this MR fixes.

Normally in Dolphin, when clicking on an item to open/activate it,
it is both selected by the click and opened/activated.

Prior to this MR, the item wasn't selected when all of these
conditions were met:
- Use ActivateItemOnSingleClick also knwon as single-click mode
- Have more than one item selected already
- Click on an item that was previously not selected

Prior to this MR, the click would deselect all items and
activate the clicked item but not select it.

With this MR, the click will deselect all items, activate
the clicked item and also select it and move the anchor there.

When testing this with folders, make sure to navigate back after activating the folder. The folder should then still be selected.

This is then consistent with the behaviour when the specific
conditions mentioned above are not met.

src/kitemviews/kitemlistcontroller.cpp

index 80c28f25ca1d98647111da6ba8064390739670f5..2422e91109ba7bc35f62cb9bcdceaeb7fbe1312e 100644 (file)
@@ -1521,6 +1521,12 @@ bool KItemListController::onPress(const QPoint& screenPos, const QPointF& pos, c
                 // and short-circuit for single-click activation (it will then propagate to onRelease and activate the item)
                 // or we just keep going for double-click activation
                 if (m_view->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick) || m_singleClickActivationEnforced) {
+                    if (!pressedItemAlreadySelected) {
+                        // An unselected item was clicked directly while deselecting multiple other items so we select it.
+                        m_selectionManager->setSelected(m_pressedIndex.value(), 1, KItemListSelectionManager::Toggle);
+                        m_selectionManager->setCurrentItem(m_pressedIndex.value());
+                        m_selectionManager->beginAnchoredSelection(m_pressedIndex.value());
+                    }
                     return true; // event handled, don't create rubber band
                 }
             } else {