diff --git a/kcmkwin/kwindesktop/CMakeLists.txt b/kcmkwin/kwindesktop/CMakeLists.txt
index 50f87c1c8a..06ebd993b1 100644
--- a/kcmkwin/kwindesktop/CMakeLists.txt
+++ b/kcmkwin/kwindesktop/CMakeLists.txt
@@ -7,6 +7,8 @@ include_directories(${KWIN_SOURCE_DIR}/effects)
set(kcm_kwindesktop_PART_SRCS main.cpp desktopnameswidget.cpp)
ki18n_wrap_ui(kcm_kwindesktop_PART_SRCS main.ui)
+qt5_add_dbus_interface( kcm_kwindesktop_PART_SRCS
+ ${KWIN_SOURCE_DIR}/org.kde.kwin.Effects.xml kwin_effects_interface)
add_library(kcm_kwindesktop MODULE ${kcm_kwindesktop_PART_SRCS})
diff --git a/kcmkwin/kwindesktop/main.cpp b/kcmkwin/kwindesktop/main.cpp
index c343dce9d7..936dad1b06 100644
--- a/kcmkwin/kwindesktop/main.cpp
+++ b/kcmkwin/kwindesktop/main.cpp
@@ -21,6 +21,7 @@ along with this program. If not, see .
#include "main.h"
#include
#include
+#include
#include
#include
@@ -336,39 +337,53 @@ void KWinDesktopConfig::save()
// Effect desktop switching
int desktopSwitcher = m_ui->effectComboBox->currentIndex();
+ bool slideEnabled = false;
+ bool cubeSlideEnabled = false;
+ bool fadeEnabled = false;
switch(desktopSwitcher) {
- case 0:
- // no effect
- effectconfig.writeEntry("slideEnabled", false);
- effectconfig.writeEntry("cubeslideEnabled", false);
- effectconfig.writeEntry("kwin4_effect_fadedesktopEnabled", false);
- break;
case 1:
// slide
- effectconfig.writeEntry("slideEnabled", true);
- effectconfig.writeEntry("cubeslideEnabled", false);
- effectconfig.writeEntry("kwin4_effect_fadedesktopEnabled", false);
+ slideEnabled = true;
break;
case 2:
// cube
- effectconfig.writeEntry("slideEnabled", false);
- effectconfig.writeEntry("cubeslideEnabled", true);
- effectconfig.writeEntry("kwin4_effect_fadedesktopEnabled", false);
+ cubeSlideEnabled = true;
break;
case 3:
// fadedesktop
- effectconfig.writeEntry("slideEnabled", false);
- effectconfig.writeEntry("cubeslideEnabled", false);
- effectconfig.writeEntry("kwin4_effect_fadedesktopEnabled", true);
+ fadeEnabled = true;
break;
}
+ effectconfig.writeEntry("slideEnabled", slideEnabled);
+ effectconfig.writeEntry("cubeslideEnabled", cubeSlideEnabled);
+ effectconfig.writeEntry("kwin4_effect_fadedesktopEnabled", fadeEnabled);
+
m_editor->save();
m_config->sync();
// Send signal to all kwin instances
QDBusMessage message = QDBusMessage::createSignal("/KWin", "org.kde.KWin", "reloadConfig");
QDBusConnection::sessionBus().send(message);
+ // and reconfigure the effects
+ OrgKdeKwinEffectsInterface interface(QStringLiteral("org.kde.KWin"),
+ QStringLiteral("/Effects"),
+ QDBusConnection::sessionBus());
+ if (slideEnabled) {
+ interface.loadEffect(BuiltInEffects::nameForEffect(BuiltInEffect::Slide));
+ } else {
+ interface.unloadEffect(BuiltInEffects::nameForEffect(BuiltInEffect::Slide));
+ }
+ if (cubeSlideEnabled) {
+ interface.loadEffect(BuiltInEffects::nameForEffect(BuiltInEffect::CubeSlide));
+ } else {
+ interface.unloadEffect(BuiltInEffects::nameForEffect(BuiltInEffect::CubeSlide));
+ }
+ if (fadeEnabled) {
+ interface.loadEffect(QStringLiteral("kwin4_effect_fadedesktop"));
+ } else {
+ interface.unloadEffect(QStringLiteral("kwin4_effect_fadedesktop"));
+ }
emit changed(false);
}