diff --git a/app/layoutsDelegates/activitycmbboxdelegate.cpp b/app/layoutsDelegates/activitycmbboxdelegate.cpp index 0c758e483..042eaae6c 100644 --- a/app/layoutsDelegates/activitycmbboxdelegate.cpp +++ b/app/layoutsDelegates/activitycmbboxdelegate.cpp @@ -44,7 +44,12 @@ ActivityCmbBoxDelegate::ActivityCmbBoxDelegate(QObject *parent) QWidget *ActivityCmbBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { - QComboBox *editor = new QComboBox(parent); + QComboBox *editor = new QComboBox(parent); + + //! use focusPolicy as flag in order to update activities only when the user is clicking in the popup + //! it was the only way I found to communicate between the activated (const) signal and the + //! setEditorData (const) function + editor->setFocusPolicy(Qt::StrongFocus); QStringList assignedActivities = index.model()->data(index, Qt::UserRole).toStringList(); QStringList availableActivities = m_settingsDialog->availableActivities(); @@ -74,6 +79,7 @@ QWidget *ActivityCmbBoxDelegate::createEditor(QWidget *parent, const QStyleOptio } connect(editor, static_cast(&QComboBox::activated), [ = ](int index) { + editor->setFocusPolicy(Qt::ClickFocus); editor->clearFocus(); }); @@ -98,6 +104,12 @@ void ActivityCmbBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *m { QComboBox *comboBox = static_cast(editor); + if (editor->focusPolicy() != Qt::ClickFocus) { + return; + } + + editor->setFocusPolicy(Qt::StrongFocus); + QStringList assignedActivities = index.model()->data(index, Qt::UserRole).toStringList(); QString selectedActivity = comboBox->currentData().toString(); diff --git a/app/layoutsDelegates/checkboxdelegate.cpp b/app/layoutsDelegates/checkboxdelegate.cpp index 76876af1a..76b89848f 100644 --- a/app/layoutsDelegates/checkboxdelegate.cpp +++ b/app/layoutsDelegates/checkboxdelegate.cpp @@ -61,7 +61,7 @@ bool CheckBoxDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, con // return false; // make sure that we have the right event type - if (event->type() == QEvent::MouseButtonRelease) { + if (event->type() == QEvent::MouseButtonDblClick) { if (!option.rect.contains(static_cast(event)->pos())) return false; } else if (event->type() == QEvent::KeyPress) { diff --git a/app/layoutsDelegates/colorcmbboxdelegate.cpp b/app/layoutsDelegates/colorcmbboxdelegate.cpp index 12556c47b..f974e7c84 100644 --- a/app/layoutsDelegates/colorcmbboxdelegate.cpp +++ b/app/layoutsDelegates/colorcmbboxdelegate.cpp @@ -107,7 +107,7 @@ void ColorCmbBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &inde int pos = Colors.indexOf(value); if (pos == -1 && value.startsWith("/")) { - comboBox->setCurrentIndex(Colors.count() - 1); + comboBox->setCurrentIndex(Colors.count()); } else { comboBox->setCurrentIndex(Colors.indexOf(value)); }