diff --git a/kded/configvalueprovider.h b/kded/configvalueprovider.h --- a/kded/configvalueprovider.h +++ b/kded/configvalueprovider.h @@ -45,12 +45,14 @@ QString scrollbarBehavior() const; QString preferDarkTheme() const; QString windowDecorationsButtonsOrder() const; + QString enableAnimations() const; private: QString toolbarStyleInDesiredNotation(const QString &kdeConfigValue, ToolbarStyleNotation notation) const; QString windowDecorationButtonsOrderInGtkNotation(const QString &kdeConfigValue) const; KSharedConfigPtr kdeglobalsConfig; KSharedConfigPtr inputConfig; KSharedConfigPtr kwinConfig; + KSharedConfigPtr ownConfig; }; diff --git a/kded/configvalueprovider.cpp b/kded/configvalueprovider.cpp --- a/kded/configvalueprovider.cpp +++ b/kded/configvalueprovider.cpp @@ -32,7 +32,8 @@ ConfigValueProvider::ConfigValueProvider() : kdeglobalsConfig(KSharedConfig::openConfig(QStringLiteral("kdeglobals"))), inputConfig(KSharedConfig::openConfig(QStringLiteral("kcminputrc"))), - kwinConfig(KSharedConfig::openConfig(QStringLiteral("kwinrc"))) + kwinConfig(KSharedConfig::openConfig(QStringLiteral("kwinrc"))), + ownConfig(KSharedConfig::openConfig()) { } @@ -140,6 +141,21 @@ return buttonsOnLeftInGtkNotation + QStringLiteral(":") + buttonsOnRightInGtkNotation; } +QString ConfigValueProvider::enableAnimations() const +{ + ownConfig->reparseConfiguration(); + KConfigGroup generalCfg = ownConfig->group(QStringLiteral("KDE")); + const qreal animationSpeedModifier = qMax(0.0, generalCfg.readEntry("AnimationDurationFactor", 1.0)); + + const bool enableAnimations = !qFuzzyIsNull(animationSpeedModifier); + + if (enableAnimations) { + return QStringLiteral("1"); + } else { + return QStringLiteral("0"); + } +} + QString ConfigValueProvider::toolbarStyleInDesiredNotation(const QString &kdeConfigValue, ConfigValueProvider::ToolbarStyleNotation notation) const { QStringList toolbarStyles {}; diff --git a/kded/gtkconfig.h b/kded/gtkconfig.h --- a/kded/gtkconfig.h +++ b/kded/gtkconfig.h @@ -69,6 +69,7 @@ void setScrollbarBehavior() const; void setDarkThemePreference() const; void setWindowDecorationsButtonsOrder() const; + void setEnableAnimations() const; void applyAllSettings() const; @@ -84,9 +85,11 @@ void onGlobalSettingsChange(int settingsChangeType, int arg) const; void onKWinSettingsChange(const KConfigGroup &group, const QByteArrayList &names) const; + void onOwnSettingsChange(const KConfigGroup &group, const QByteArrayList &names) const; private: QScopedPointer configValueProvider; QScopedPointer themePreviewer; KConfigWatcher::Ptr kwinConfigWatcher; + KConfigWatcher::Ptr ownConfigWatcher; }; diff --git a/kded/gtkconfig.cpp b/kded/gtkconfig.cpp --- a/kded/gtkconfig.cpp +++ b/kded/gtkconfig.cpp @@ -38,15 +38,17 @@ KDEDModule(parent), configValueProvider(new ConfigValueProvider()), themePreviewer(new ThemePreviewer(this)), - kwinConfigWatcher(KConfigWatcher::create(KSharedConfig::openConfig(QStringLiteral("kwinrc")))) + kwinConfigWatcher(KConfigWatcher::create(KSharedConfig::openConfig(QStringLiteral("kwinrc")))), + ownConfigWatcher(KConfigWatcher::create(KSharedConfig::openConfig())) { QDBusConnection dbus = QDBusConnection::sessionBus(); dbus.registerService(QStringLiteral("org.kde.GtkConfig")); dbus.registerObject(QStringLiteral("/GtkConfig"), this, QDBusConnection::ExportScriptableSlots); connect(qGuiApp, &QGuiApplication::fontChanged, this, &GtkConfig::setFont); connect(KIconLoader::global(), &KIconLoader::iconChanged, this, &GtkConfig::setIconTheme); connect(kwinConfigWatcher.data(), &KConfigWatcher::configChanged, this, &GtkConfig::onKWinSettingsChange); + connect(ownConfigWatcher.data(), &KConfigWatcher::configChanged, this, &GtkConfig::onOwnSettingsChange); dbus.connect( QString(), QStringLiteral("/KGlobalSettings"), @@ -180,6 +182,15 @@ ConfigEditor::setGtk3ConfigValueXSettingsd(QStringLiteral("Gtk/DecorationLayout"), windowDecorationsButtonOrder); } +void GtkConfig::setEnableAnimations() const +{ + const QString enableAnimations = configValueProvider->enableAnimations(); + ConfigEditor::setGtk2ConfigValue(QStringLiteral("gtk-button-images"), enableAnimations); + ConfigEditor::setGtk3ConfigValueDconf(QStringLiteral("enable-animations"), enableAnimations, QStringLiteral("org.gnome.desktop.interface")); + ConfigEditor::setGtk3ConfigValueSettingsIni(QStringLiteral("gtk-enable-animations"), enableAnimations); + ConfigEditor::setGtk3ConfigValueXSettingsd(QStringLiteral("Gtk/EnableAnimations"), enableAnimations); +} + void GtkConfig::applyAllSettings() const { setFont(); @@ -191,6 +202,7 @@ setScrollbarBehavior(); setDarkThemePreference(); setWindowDecorationsButtonsOrder(); + setEnableAnimations(); } void GtkConfig::onGlobalSettingsChange(int settingsChangeType, int arg) const @@ -219,4 +231,12 @@ } } +void GtkConfig::onOwnSettingsChange(const KConfigGroup &group, const QByteArrayList &names) const +{ + if (group.name() == QLatin1String("KDE") + && names.contains(QByteArrayLiteral("AnimationDurationFactor"))) { + setEnableAnimations(); + } +} + #include "gtkconfig.moc"