summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/modlist.cpp28
-rw-r--r--src/modlistsortproxy.h1
2 files changed, 25 insertions, 4 deletions
diff --git a/src/modlist.cpp b/src/modlist.cpp
index 74aa542d..a7990132 100644
--- a/src/modlist.cpp
+++ b/src/modlist.cpp
@@ -23,6 +23,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "installationtester.h"
#include "qtgroupingproxy.h"
#include "viewmarkingscrollbar.h"
+#include "modlistsortproxy.h"
#include <gameinfo.h>
#include <appconfig.h>
#include <utility.h>
@@ -1091,14 +1092,33 @@ bool ModList::deleteSelection(QAbstractItemView *itemView)
bool ModList::toggleSelection(QAbstractItemView *itemView)
{
QAbstractItemModel *model = itemView->model();
+
+ // having a filter active when dataChanged is called caused a crash
+ // (at least with some Qt versions)
+ ModListSortProxy *filterModel = qobject_cast<ModListSortProxy*>(model);
+ std::vector<int> filter;
+ if (filterModel != nullptr) {
+ filter = filterModel->categoryFilter();
+ filterModel->setCategoryFilter(std::vector<int>());
+ }
+
QItemSelectionModel *selectionModel = itemView->selectionModel();
for (QModelIndex idx : selectionModel->selectedRows()) {
- int oldState = idx.data(Qt::CheckStateRole).toInt();
- model->setData(idx, oldState == Qt::Unchecked ? Qt::Checked
- : Qt::Unchecked,
- Qt::CheckStateRole);
+ int modId = idx.data(Qt::UserRole + 1).toInt();
+ m_Profile->setModEnabled(modId, !m_Profile->modEnabled(modId));
+ emit modlist_changed(idx, 0);
+ }
+
+ m_Modified = true;
+ m_LastCheck.restart();
+
+ emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
+
+ if (filterModel != nullptr) {
+ filterModel->setCategoryFilter(filter);
}
+
return true;
}
diff --git a/src/modlistsortproxy.h b/src/modlistsortproxy.h
index 35c60235..93092ba7 100644
--- a/src/modlistsortproxy.h
+++ b/src/modlistsortproxy.h
@@ -50,6 +50,7 @@ public:
void setProfile(Profile *profile);
void setCategoryFilter(const std::vector<int> &categories);
+ std::vector<int> categoryFilter() const { return m_CategoryFilter; }
void setContentFilter(const std::vector<int> &content);