diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/modlist.cpp | 28 | ||||
| -rw-r--r-- | src/modlistsortproxy.h | 1 |
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);
|
