Fix KWin decoration KCM showing correct index at startup
Summary: The KCM has a context property of the currently set theme index. This is set before the decorations model is populated, so it is currently always -1. This model is populated after the constructor but before KCModule::load(). KCModule::load is called from KCModule::showEvent so before QQuickGridView will start doing anything with delegates. This fixes the problem simply and also avoid parsing the config file multiple times. This bug was introduced in 5.9.4: Someone made a (tested) change to make sure the view scrolled to the right place on startup. I then made a (tested) commit fixing the crash on exit The author then updated his patch to my changes, but now in a way that didn't work. Test Plan: Opened system settings module with a million decorations. The correct entry was visible and highlighted. Reviewers: #plasma, graesslin Reviewed By: #plasma, graesslin Subscribers: plasma-devel, kwin, #kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D5401
This commit is contained in:
parent
819c645863
commit
3709996f8a
3 changed files with 6 additions and 12 deletions
|
@ -99,7 +99,6 @@ ConfigurationModule::ConfigurationModule(QWidget *parent, const QVariantList &ar
|
|||
|
||||
m_quickView->rootContext()->setContextProperty(QStringLiteral("decorationsModel"), m_proxyModel);
|
||||
updateColors();
|
||||
m_quickView->rootContext()->setContextProperty("savedIndex", savedIndex());
|
||||
m_quickView->rootContext()->setContextProperty("_borderSizesIndex", 3); // 3 is normal
|
||||
m_quickView->rootContext()->setContextProperty("leftButtons", m_leftButtons);
|
||||
m_quickView->rootContext()->setContextProperty("rightButtons", m_rightButtons);
|
||||
|
@ -300,14 +299,6 @@ QVector< KDecoration2::DecorationButtonType > readDecorationButtons(const KConfi
|
|||
return buttonsFromString(config.readEntry(key, buttonsToString(defaultValue)));
|
||||
}
|
||||
|
||||
int ConfigurationModule::savedIndex() const
|
||||
{
|
||||
const KConfigGroup config = KSharedConfig::openConfig("kwinrc")->group(s_pluginName);
|
||||
const QString plugin = config.readEntry("library", s_defaultPlugin);
|
||||
const QString theme = config.readEntry("theme", s_defaultTheme);
|
||||
return m_proxyModel->mapFromSource(m_model->findDecoration(plugin, theme)).row();
|
||||
}
|
||||
|
||||
void ConfigurationModule::load()
|
||||
{
|
||||
s_loading = true;
|
||||
|
@ -318,6 +309,9 @@ void ConfigurationModule::load()
|
|||
const QVariant border = QVariant::fromValue(stringToSize(config.readEntry("BorderSize", s_borderSizeNormal)));
|
||||
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);
|
||||
|
||||
// buttons
|
||||
const auto &left = readDecorationButtons(config, "ButtonsOnLeft", QVector<KDecoration2::DecorationButtonType >{
|
||||
KDecoration2::DecorationButtonType::Menu,
|
||||
|
|
|
@ -57,8 +57,6 @@ public Q_SLOTS:
|
|||
void defaults() override;
|
||||
void load() override;
|
||||
void save() override;
|
||||
//what index is in the model the theme saved as current? needed to move the view at the proper index right at startup
|
||||
int savedIndex() const;
|
||||
|
||||
protected:
|
||||
void showEvent(QShowEvent *ev) override;
|
||||
|
|
|
@ -33,7 +33,9 @@ ScrollView {
|
|||
cellWidth: 20 * units.gridUnit
|
||||
cellHeight: cellWidth / 1.6
|
||||
onContentHeightChanged: {
|
||||
if (gridView.currentIndex == -1) {
|
||||
gridView.currentIndex = savedIndex;
|
||||
}
|
||||
gridView.positionViewAtIndex(gridView.currentIndex, GridView.Visible);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue