diff --git a/kcms/cursortheme/kcmcursortheme.h b/kcms/cursortheme/kcmcursortheme.h --- a/kcms/cursortheme/kcmcursortheme.h +++ b/kcms/cursortheme/kcmcursortheme.h @@ -38,7 +38,7 @@ Q_PROPERTY(QAbstractItemModel *cursorsModel READ cursorsModel CONSTANT) Q_PROPERTY(QAbstractItemModel *sizesModel READ sizesModel CONSTANT) Q_PROPERTY(int selectedThemeRow READ selectedThemeRow WRITE setSelectedThemeRow NOTIFY selectedThemeRowChanged) - Q_PROPERTY(int preferredSize READ preferredSize WRITE setPreferredSize NOTIFY preferredSizeChanged) + Q_PROPERTY(int selectedSizeRow READ selectedSizeRow WRITE setSelectedSizeRow NOTIFY selectedSizeRowChanged) public: CursorThemeConfig(QObject *parent, const QVariantList &); @@ -62,10 +62,8 @@ int selectedThemeRow() const; void setSelectedThemeRow(int row); - /** @returns 0 if in the UI "automatic size" is selected, otherwise - returns the custom size. */ - int preferredSize() const; - void setPreferredSize(int size); + int selectedSizeRow() const; + void setSelectedSizeRow(int row); QAbstractItemModel *cursorsModel(); QAbstractItemModel *sizesModel(); @@ -75,7 +73,7 @@ void canResizeChanged(); void canConfigureChanged(); void selectedThemeRowChanged(); - void preferredSizeChanged(); + void selectedSizeRowChanged(); void showSuccessMessage(const QString &message); void showInfoMessage(const QString &message); @@ -129,6 +127,7 @@ int m_originalPreferredSize; int m_selectedThemeRow; + int m_selectedSizeRow; int m_originalSelectedThemeRow; bool m_canInstall; bool m_canResize; diff --git a/kcms/cursortheme/kcmcursortheme.cpp b/kcms/cursortheme/kcmcursortheme.cpp --- a/kcms/cursortheme/kcmcursortheme.cpp +++ b/kcms/cursortheme/kcmcursortheme.cpp @@ -62,6 +62,7 @@ m_appliedSize(0), m_preferredSize(0), m_selectedThemeRow(-1), + m_selectedSizeRow(-1), m_originalSelectedThemeRow(-1), m_canInstall(true), m_canResize(true), @@ -165,20 +166,23 @@ return m_selectedThemeRow; } -void CursorThemeConfig::setPreferredSize(int size) +void CursorThemeConfig::setSelectedSizeRow(int row) { - if (m_preferredSize == size) { - return; - } + Q_ASSERT (row < m_sizesModel->rowCount() && row >= 0); + + // we don't return early if m_selectedSizeRow == row as this is called after the model is changed + m_selectedSizeRow = row; + emit selectedSizeRowChanged(); + + int size = m_sizesModel->item(row)->data().toInt(); m_preferredSize = size; - emit preferredSizeChanged(); setNeedsSave(m_originalSelectedThemeRow != m_selectedThemeRow || m_originalPreferredSize != m_preferredSize); } -int CursorThemeConfig::preferredSize() const +int CursorThemeConfig::selectedSizeRow() const { - return m_preferredSize; + return m_selectedSizeRow; } @@ -273,7 +277,10 @@ }; } }; - setPreferredSize(selectItem); + if (selectItem < 0) { + selectItem = 0; + } + setSelectedSizeRow(selectItem); }; }; diff --git a/kcms/cursortheme/package/contents/ui/main.qml b/kcms/cursortheme/package/contents/ui/main.qml --- a/kcms/cursortheme/package/contents/ui/main.qml +++ b/kcms/cursortheme/package/contents/ui/main.qml @@ -97,12 +97,17 @@ } QtControls.ComboBox { id: sizeCombo - currentIndex: 0 - onCountChanged: currentIndex = 0 model: kcm.sizesModel textRole: "display" - onCurrentTextChanged: { - kcm.preferredSize = isNaN(parseInt(sizeCombo.currentText)) ? 0 : parseInt(sizeCombo.currentText); + onActivated: { + kcm.selectedSizeRow = sizeCombo.currentIndex + } + + Connections { + target: kcm + onSelectedSizeRowChanged: { + sizeCombo.currentIndex = kcm.selectedSizeRow + } } delegate: QtControls.ItemDelegate {