diff --git a/containments/desktop/package/contents/ui/ConfigFilter.qml b/containments/desktop/package/contents/ui/ConfigFilter.qml --- a/containments/desktop/package/contents/ui/ConfigFilter.qml +++ b/containments/desktop/package/contents/ui/ConfigFilter.qml @@ -103,12 +103,7 @@ Layout.maximumWidth: 18 // FIXME HACK: Use actual radio button width. checked: model.checked - - onCheckedChanged: { - if (checked != model.checked) { - mimeTypesModel.setRowChecked(model.index, checked); - } - } + onCheckedChanged: model.checked = checked } PlasmaCore.IconItem { diff --git a/containments/desktop/package/contents/ui/FolderItemPreviewPluginsDialog.qml b/containments/desktop/package/contents/ui/FolderItemPreviewPluginsDialog.qml --- a/containments/desktop/package/contents/ui/FolderItemPreviewPluginsDialog.qml +++ b/containments/desktop/package/contents/ui/FolderItemPreviewPluginsDialog.qml @@ -62,12 +62,7 @@ text: model.display checked: model.checked - - onCheckedChanged: { - if (checked != model.checked) { - previewPluginsModel.setRowChecked(model.index, checked); - } - } + onCheckedChanged: model.checked = checked } } } diff --git a/containments/desktop/plugins/folder/mimetypesmodel.h b/containments/desktop/plugins/folder/mimetypesmodel.h --- a/containments/desktop/plugins/folder/mimetypesmodel.h +++ b/containments/desktop/plugins/folder/mimetypesmodel.h @@ -38,9 +38,9 @@ QHash roleNames() const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; + bool setData(const QModelIndex &index, const QVariant &value, int role) Q_DECL_OVERRIDE; Q_INVOKABLE void checkAll(); - Q_INVOKABLE void setRowChecked(int row, bool checked); int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE { Q_UNUSED(parent) return m_mimeTypesList.size(); } @@ -68,7 +68,6 @@ FilterableMimeTypesModel(QObject *parent = 0); ~FilterableMimeTypesModel(); - Q_INVOKABLE void setRowChecked(int row, bool checked); Q_INVOKABLE void checkAll(); QStringList checkedTypes() const; diff --git a/containments/desktop/plugins/folder/mimetypesmodel.cpp b/containments/desktop/plugins/folder/mimetypesmodel.cpp --- a/containments/desktop/plugins/folder/mimetypesmodel.cpp +++ b/containments/desktop/plugins/folder/mimetypesmodel.cpp @@ -76,15 +76,23 @@ return QVariant(); } -void MimeTypesModel::setRowChecked(int row, bool checked) +bool MimeTypesModel::setData(const QModelIndex &index, const QVariant &value, int role) { - checkedRows[row] = checked; - - QModelIndex idx = index(row, 0); + if (index.row() < 0 || index.row() >= m_mimeTypesList.size()) { + return false; + } - emit dataChanged(idx, idx); + if (role == Qt::CheckStateRole) { + const bool newChecked = value.toBool(); + if (checkedRows.at(index.row()) != newChecked) { + checkedRows[index.row()] = newChecked; + emit dataChanged(index, index, {role}); + emit checkedTypesChanged(); + return true; + } + } - emit checkedTypesChanged(); + return false; } void MimeTypesModel::checkAll() @@ -153,13 +161,6 @@ { } -void FilterableMimeTypesModel::setRowChecked(int row, bool checked) -{ - QModelIndex idx = index(row, 0); - - m_sourceModel->setRowChecked(mapToSource(idx).row(), checked); -} - void FilterableMimeTypesModel::checkAll() { m_sourceModel->checkAll(); diff --git a/containments/desktop/plugins/folder/previewpluginsmodel.h b/containments/desktop/plugins/folder/previewpluginsmodel.h --- a/containments/desktop/plugins/folder/previewpluginsmodel.h +++ b/containments/desktop/plugins/folder/previewpluginsmodel.h @@ -38,7 +38,7 @@ QHash roleNames() const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; - Q_INVOKABLE void setRowChecked(int row, bool checked); + bool setData(const QModelIndex &index, const QVariant &value, int role) Q_DECL_OVERRIDE; int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE { Q_UNUSED(parent) return m_plugins.size(); } diff --git a/containments/desktop/plugins/folder/previewpluginsmodel.cpp b/containments/desktop/plugins/folder/previewpluginsmodel.cpp --- a/containments/desktop/plugins/folder/previewpluginsmodel.cpp +++ b/containments/desktop/plugins/folder/previewpluginsmodel.cpp @@ -65,13 +65,19 @@ return QVariant(); } -void PreviewPluginsModel::setRowChecked(int row, bool checked) +bool PreviewPluginsModel::setData(const QModelIndex &index, const QVariant &value, int role) { - m_checkedRows[row] = checked; + if (index.row() < 0 || index.row() >= m_plugins.size()) { + return false; + } - QModelIndex idx = index(row, 0); + if (role == Qt::CheckStateRole) { + m_checkedRows[index.row()] = value.toBool(); + emit dataChanged(index, index, {role}); + return true; + } - emit dataChanged(idx, idx); + return false; } int PreviewPluginsModel::indexOfPlugin(const QString &name) const