diff --git a/src/plugins/git/gitsubmiteditor.cpp b/src/plugins/git/gitsubmiteditor.cpp index a9177ff09cceadd7d8c11724b59a70e19cf482fe..d318580b5159e1d50407dfe749e95f72c9c030bd 100644 --- a/src/plugins/git/gitsubmiteditor.cpp +++ b/src/plugins/git/gitsubmiteditor.cpp @@ -61,7 +61,8 @@ public: for (; j < source->rowCount(); ++j) { CommitData::StateFilePair sourceStateFile = gitSource->stateFilePair(j); if (stateFile == sourceStateFile) { - setChecked(i, source->checked(j)); + if (isCheckable(i) && source->isCheckable(j)) + setChecked(i, source->checked(j)); break; } else if (stateFile < sourceStateFile) { break; diff --git a/src/plugins/vcsbase/submitfilemodel.cpp b/src/plugins/vcsbase/submitfilemodel.cpp index 89555876acbe203a5844d55e154430559d601778..5c9eee854dfe2a0c6a094efae597081867932d56 100644 --- a/src/plugins/vcsbase/submitfilemodel.cpp +++ b/src/plugins/vcsbase/submitfilemodel.cpp @@ -48,10 +48,12 @@ static QList<QStandardItem *> createFileRow(const QString &fileName, const QStri CheckMode checked, const QVariant &v) { QStandardItem *statusItem = new QStandardItem(status); - statusItem->setCheckable(checked != Uncheckable); - if (checked != Uncheckable) + Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled; + if (checked != Uncheckable) { + flags |= Qt::ItemIsUserCheckable; statusItem->setCheckState(checked == Checked ? Qt::Checked : Qt::Unchecked); - statusItem->setFlags(Qt::ItemIsSelectable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled); + } + statusItem->setFlags(flags); statusItem->setData(v); QStandardItem *fileItem = new QStandardItem(fileName); fileItem->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled); @@ -103,6 +105,13 @@ QString SubmitFileModel::file(int row) const return item(row, fileColumn)->text(); } +bool SubmitFileModel::isCheckable(int row) const +{ + if (row < 0 || row >= rowCount()) + return false; + return item(row)->isCheckable(); +} + bool SubmitFileModel::checked(int row) const { if (row < 0 || row >= rowCount()) @@ -166,7 +175,8 @@ void SubmitFileModel::updateSelections(SubmitFileModel *source) // to test rows earlier than latest match found for (int j = lastMatched; j < sourceRows; ++j) { if (file(i) == source->file(j) && state(i) == source->state(j)) { - setChecked(i, source->checked(j)); + if (isCheckable(i) && source->isCheckable(j)) + setChecked(i, source->checked(j)); lastMatched = j + 1; // No duplicates, start on next entry break; } diff --git a/src/plugins/vcsbase/submitfilemodel.h b/src/plugins/vcsbase/submitfilemodel.h index 216e8efbd19536229f23eee4080585421b681d7e..aa523335cf0ed52fd16c73bd6f370f796dbf76d6 100644 --- a/src/plugins/vcsbase/submitfilemodel.h +++ b/src/plugins/vcsbase/submitfilemodel.h @@ -55,6 +55,7 @@ public: QString state(int row) const; QString file(int row) const; + bool isCheckable(int row) const; bool checked(int row) const; void setChecked(int row, bool check); void setAllChecked(bool check);