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); }