diff --git a/kcmkwin/kwindecoration/kcm.cpp b/kcmkwin/kwindecoration/kcm.cpp --- a/kcmkwin/kwindecoration/kcm.cpp +++ b/kcmkwin/kwindecoration/kcm.cpp @@ -106,14 +106,15 @@ m_quickView->rootContext()->setContextProperty("leftButtons", m_leftButtons); m_quickView->rootContext()->setContextProperty("rightButtons", m_rightButtons); m_quickView->rootContext()->setContextProperty("availableButtons", m_availableButtons); + m_quickView->rootContext()->setContextProperty("initialThemeIndex", -1); m_quickView->rootContext()->setContextProperty("titleFont", QFontDatabase::systemFont(QFontDatabase::TitleFont)); m_quickView->setResizeMode(QQuickView::SizeRootObjectToView); m_quickView->setSource(QUrl::fromLocalFile(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("kwin/kcm_kwindecoration/main.qml")))); if (m_quickView->status() == QQuickView::Ready) { auto listView = m_quickView->rootObject()->findChild("listView"); if (listView) { - connect(listView, SIGNAL(currentIndexChanged()), this, SLOT(changed())); + connect(listView, SIGNAL(userChangedSelection()), this, SLOT(changed())); } } @@ -313,7 +314,7 @@ m_ui->borderSizesCombo->setCurrentIndex(m_ui->borderSizesCombo->findData(border)); int themeIndex = m_proxyModel->mapFromSource(m_model->findDecoration(plugin, theme)).row(); - m_quickView->rootContext()->setContextProperty("savedIndex", themeIndex); + m_quickView->rootContext()->setContextProperty("initialThemeIndex", themeIndex); // buttons const auto &left = readDecorationButtons(config, "ButtonsOnLeft", QVector{ diff --git a/kcmkwin/kwindecoration/qml/Previews.qml b/kcmkwin/kwindecoration/qml/Previews.qml --- a/kcmkwin/kwindecoration/qml/Previews.qml +++ b/kcmkwin/kwindecoration/qml/Previews.qml @@ -28,16 +28,17 @@ GridView { id: gridView objectName: "listView" + signal userChangedSelection() model: decorationsModel cellWidth: 20 * units.gridUnit cellHeight: cellWidth / 1.6 + highlightFollowsCurrentItem: true onContentHeightChanged: { - if (gridView.currentIndex == -1) { - gridView.currentIndex = savedIndex; + if (gridView.currentIndex == -1 && initialThemeIndex != -1) { + gridView.currentIndex = initialThemeIndex } - gridView.positionViewAtIndex(gridView.currentIndex, GridView.Visible); + gridView.positionViewAtIndex(gridView.currentIndex, GridView.Visible) } - Rectangle { z: -1 anchors.fill: parent @@ -63,11 +64,17 @@ bridge: bridgeItem.bridge borderSizesIndex: gridView.borderSizesIndex } + Component.onCompleted: { + if (gridView.currentIndex == -1 && initialThemeIndex != -1) { + gridView.currentIndex = initialThemeIndex + } + } MouseArea { hoverEnabled: false anchors.fill: parent onClicked: { - gridView.currentIndex = index; + gridView.currentIndex = index + gridView.userChangedSelection() } } ColumnLayout { @@ -107,7 +114,8 @@ hoverEnabled: false anchors.fill: parent onClicked: { - gridView.currentIndex = index; + gridView.currentIndex = index + gridView.userChangedSelection() } } Layout.fillWidth: true @@ -138,6 +146,7 @@ text: i18n("Configure %1...", decorationPreviews.themeName) onClicked: { gridView.currentIndex = index + gridView.userChangedSelection() bridgeItem.bridge.configure() } }