From 32e441897fb5dc5d49764c8ce2cb8b3475bcdd20 Mon Sep 17 00:00:00 2001 From: Mikaƫl Capelle Date: Sun, 10 Jan 2021 19:29:41 +0100 Subject: Request window focus when dropping external folder and scroll to new mod. --- src/modlistview.cpp | 22 ++++++++++++++++------ src/modlistview.h | 7 ++++++- 2 files changed, 22 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/modlistview.cpp b/src/modlistview.cpp index c23cd34b..13c34226 100644 --- a/src/modlistview.cpp +++ b/src/modlistview.cpp @@ -390,6 +390,15 @@ void ModListView::setSelected(const QModelIndex& current, const QModelIndexList& } } +void ModListView::scrollToAndSelect(const QModelIndex& index) +{ + // focus, scroll to and select + scrollTo(index); + setCurrentIndex(index); + selectionModel()->select(index, QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows); + QTimer::singleShot(0, [=] { setFocus(); }); +} + void ModListView::refreshExpandedItems() { auto* model = m_sortProxy->sourceModel(); @@ -470,11 +479,7 @@ void ModListView::onModInstalled(const QString& modName) setExpanded(qIndex.parent(), true); } - // focus, scroll to and select - setFocus(Qt::OtherFocusReason); - scrollTo(qIndex); - setCurrentIndex(qIndex); - selectionModel()->select(qIndex, QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows); + scrollToAndSelect(qIndex); } void ModListView::onModFilterActive(bool filterActive) @@ -589,6 +594,8 @@ void ModListView::refreshFilters() void ModListView::onExternalFolderDropped(const QUrl& url, int priority) { + setWindowState(Qt::WindowActive); + QFileInfo fileInfo(url.toLocalFile()); GuessedValue name; @@ -624,9 +631,12 @@ void ModListView::onExternalFolderDropped(const QUrl& url, int priority) m_core->refresh(); + const auto index = ModInfo::getIndex(name); if (priority != -1) { - m_core->modList()->changeModPriority(ModInfo::getIndex(name), priority); + m_core->modList()->changeModPriority(index, priority); } + + scrollToAndSelect(indexModelToView(m_core->modList()->index(index, 0))); } bool ModListView::moveSelection(int key) diff --git a/src/modlistview.h b/src/modlistview.h index c9588181..53c71458 100644 --- a/src/modlistview.h +++ b/src/modlistview.h @@ -79,11 +79,16 @@ public: std::optional nextMod(unsigned int index) const; std::optional prevMod(unsigned int index) const; - // check if the given mod is visible + // check if the given mod is visible, i.e. not filtered (returns true + // for collapsed mods) // bool isModVisible(unsigned int index) const; bool isModVisible(ModInfo::Ptr mod) const; + // focus the view, select the given index and scroll to it + // + void scrollToAndSelect(const QModelIndex& index); + // refresh the view (to call when settings have been changed) // void refresh(); -- cgit v1.3.1