mirror of
https://invent.kde.org/system/dolphin
synced 2024-09-12 12:54:29 +00:00
Avoid emitting twice twice selectionChanged when keyboard changes the selection, fix slotChangeCurrentItem
Summary: In KItemListController::slotChangeCurrentItem searchFromNextItem use was bugged : The two branches of `if (searchFromNextItem)` both looked for the next keyboard with indexForKeyboardSearch(text, currentIndex (the first one with just a +1 modulo). But when searchFromNextItem is false, we are supposed to start to look for the next indexKeyboard from the start of the list `0`, not from the `currentIndex` Reviewers: elvisangelaccio, #dolphin Reviewed By: elvisangelaccio, #dolphin Subscribers: kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D24505
This commit is contained in:
parent
e3f1d50b73
commit
56a38da57a
|
@ -472,19 +472,18 @@ void KItemListController::slotChangeCurrentItem(const QString& text, bool search
|
|||
if (!m_model || m_model->count() == 0) {
|
||||
return;
|
||||
}
|
||||
const int currentIndex = m_selectionManager->currentItem();
|
||||
int index;
|
||||
if (searchFromNextItem) {
|
||||
const int currentIndex = m_selectionManager->currentItem();
|
||||
index = m_model->indexForKeyboardSearch(text, (currentIndex + 1) % m_model->count());
|
||||
} else {
|
||||
index = m_model->indexForKeyboardSearch(text, currentIndex);
|
||||
index = m_model->indexForKeyboardSearch(text, 0);
|
||||
}
|
||||
if (index >= 0) {
|
||||
m_selectionManager->setCurrentItem(index);
|
||||
|
||||
if (m_selectionBehavior != NoSelection) {
|
||||
m_selectionManager->clearSelection();
|
||||
m_selectionManager->setSelected(index, 1);
|
||||
m_selectionManager->replaceSelection(index);
|
||||
m_selectionManager->beginAnchoredSelection(index);
|
||||
}
|
||||
|
||||
|
|
|
@ -173,6 +173,16 @@ void KItemListSelectionManager::clearSelection()
|
|||
}
|
||||
}
|
||||
|
||||
void KItemListSelectionManager::replaceSelection(int index, int count)
|
||||
{
|
||||
const KItemSet previous = selectedItems();
|
||||
if (!previous.isEmpty()) {
|
||||
m_selectedItems.clear();
|
||||
m_isAnchoredSelectionActive = false;
|
||||
}
|
||||
setSelected(index, count);
|
||||
}
|
||||
|
||||
void KItemListSelectionManager::beginAnchoredSelection(int anchor)
|
||||
{
|
||||
if (anchor >= 0 && m_model && anchor < m_model->count()) {
|
||||
|
|
|
@ -62,6 +62,13 @@ public:
|
|||
bool hasSelection() const;
|
||||
|
||||
void setSelected(int index, int count = 1, SelectionMode mode = Select);
|
||||
/**
|
||||
* Equivalent to:
|
||||
* clearSelection();
|
||||
* setSelected(index, count);
|
||||
* but emitting once only selectionChanged signal
|
||||
*/
|
||||
void replaceSelection(int index, int count = 1);
|
||||
void clearSelection();
|
||||
|
||||
void beginAnchoredSelection(int anchor);
|
||||
|
|
Loading…
Reference in a new issue