diff --git a/kconf_update/CMakeLists.txt b/kconf_update/CMakeLists.txt index 175971df46..f8c9b74735 100644 --- a/kconf_update/CMakeLists.txt +++ b/kconf_update/CMakeLists.txt @@ -25,3 +25,5 @@ install(PROGRAMS kwinrules-5.19-placement.pl DESTINATION ${KDE_INSTALL_KCONFUPDATEDIR}) install(PROGRAMS kwinrules-5.23-virtual-desktop-ids.py DESTINATION ${KDE_INSTALL_KCONFUPDATEDIR}) +install(PROGRAMS kwin-5.25-effect-pluginid-config-group.py + DESTINATION ${KDE_INSTALL_KCONFUPDATEDIR}) diff --git a/kconf_update/kwin-5.25-effect-pluginid-config-group.py b/kconf_update/kwin-5.25-effect-pluginid-config-group.py new file mode 100644 index 0000000000..a711aa0b1c --- /dev/null +++ b/kconf_update/kwin-5.25-effect-pluginid-config-group.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 + +import fileinput + +def migrate_group(old, new, line): + if not "[Effect-{}".format(old) in line: + return + print("# DELETE Effect-{}".format(old)) + print("[Effect-{}]\n".format(new)) + +for line in fileinput.input(): + if not "[Effect-" in line: + print(line) + continue + migrate_group("Blur", "blur", line) + migrate_group("DesktopGrid", "desktopgrid", line) + migrate_group("DimInactive", "diminactive", line) + migrate_group("FallApart", "fallapart", line) + migrate_group("Glide", "glide", line) + migrate_group("Kscreen", "kscreen", line) + migrate_group("LookingGlass", "lookingglass", line) + migrate_group("MagicLamp", "magiclamp", line) + migrate_group("Magnifier", "magnifier", line) + migrate_group("MouseClick", "mouseclick", line) + migrate_group("MouseMark", "mousemark", line) + migrate_group("Overview", "overview", line) + migrate_group("PresentWindows", "presentwindows", line) + migrate_group("Sheet", "sheet", line) + migrate_group("ShowFps", "showfps", line) + migrate_group("Slide", "slide", line) + migrate_group("SlidingPopups", "slidingpopups", line) + migrate_group("ThumbnailAside", "thumbnailaside", line) + migrate_group("TrackMouse", "trackmouse", line) + migrate_group("Wobbly", "wobblywindows", line) + migrate_group("Zoom", "zoom", line) diff --git a/kconf_update/kwin.upd b/kconf_update/kwin.upd index a500343b33..85f0c2ac58 100644 --- a/kconf_update/kwin.upd +++ b/kconf_update/kwin.upd @@ -85,3 +85,9 @@ Id=enable-scale-effect-by-default File=kwinrc Group=Plugins Key=kwin4_effect_fadeEnabled,kwin4_effect_scaleEnabled + +# Overview config group based upon plugin id +Id=overview-group-plugin-id +File=kwinrc +Options=AllGroups +Script=kwin-5.25-effect-pluginid-config-group.py,python3 diff --git a/src/effects/blur/blur.kcfg b/src/effects/blur/blur.kcfg index c2d3ff37cf..a73ccec3df 100644 --- a/src/effects/blur/blur.kcfg +++ b/src/effects/blur/blur.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 15 diff --git a/src/effects/desktopgrid/desktopgrid.kcfg b/src/effects/desktopgrid/desktopgrid.kcfg index 28a615a349..bec72e6099 100644 --- a/src/effects/desktopgrid/desktopgrid.kcfg +++ b/src/effects/desktopgrid/desktopgrid.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + diff --git a/src/effects/desktopgrid/metadata.json b/src/effects/desktopgrid/metadata.json index be0214f226..802e1cf3e8 100644 --- a/src/effects/desktopgrid/metadata.json +++ b/src/effects/desktopgrid/metadata.json @@ -69,6 +69,7 @@ "Name[zh_CN]": "虚拟桌面平铺网格" }, "X-KDE-ConfigModule": "kwin_desktopgrid_config", + "X-KWin-Border-Activate": true, "org.kde.kwin.effect": { "video": "https://files.kde.org/plasma/kwin/effect-videos/desktop_grid.mp4" } diff --git a/src/effects/diminactive/diminactive.kcfg b/src/effects/diminactive/diminactive.kcfg index ebad90c9eb..b8493d82cb 100644 --- a/src/effects/diminactive/diminactive.kcfg +++ b/src/effects/diminactive/diminactive.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 25 diff --git a/src/effects/fallapart/fallapart.kcfg b/src/effects/fallapart/fallapart.kcfg index 57221a1c2b..fbefa02107 100644 --- a/src/effects/fallapart/fallapart.kcfg +++ b/src/effects/fallapart/fallapart.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 40 1 diff --git a/src/effects/glide/glide.kcfg b/src/effects/glide/glide.kcfg index 917f725a0a..d90520ca56 100644 --- a/src/effects/glide/glide.kcfg +++ b/src/effects/glide/glide.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 0 diff --git a/src/effects/kscreen/kscreen.kcfg b/src/effects/kscreen/kscreen.kcfg index 9aebc063b4..69442f11a3 100644 --- a/src/effects/kscreen/kscreen.kcfg +++ b/src/effects/kscreen/kscreen.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 0 diff --git a/src/effects/lookingglass/lookingglass.kcfg b/src/effects/lookingglass/lookingglass.kcfg index 236befdcae..8b6905fedb 100644 --- a/src/effects/lookingglass/lookingglass.kcfg +++ b/src/effects/lookingglass/lookingglass.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 200 diff --git a/src/effects/magiclamp/magiclamp.kcfg b/src/effects/magiclamp/magiclamp.kcfg index 67c8ba0c14..6ae7a5af73 100644 --- a/src/effects/magiclamp/magiclamp.kcfg +++ b/src/effects/magiclamp/magiclamp.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 0 diff --git a/src/effects/magnifier/magnifier.kcfg b/src/effects/magnifier/magnifier.kcfg index 85e08a14e4..414944c65d 100644 --- a/src/effects/magnifier/magnifier.kcfg +++ b/src/effects/magnifier/magnifier.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 200 diff --git a/src/effects/mouseclick/mouseclick.kcfg b/src/effects/mouseclick/mouseclick.kcfg index 64b39b3f68..d67c39187b 100644 --- a/src/effects/mouseclick/mouseclick.kcfg +++ b/src/effects/mouseclick/mouseclick.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + QColor(Qt::red) diff --git a/src/effects/mousemark/mousemark.kcfg b/src/effects/mousemark/mousemark.kcfg index ebaf9ac43f..1f24d7566a 100644 --- a/src/effects/mousemark/mousemark.kcfg +++ b/src/effects/mousemark/mousemark.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 3 diff --git a/src/effects/overview/metadata.json b/src/effects/overview/metadata.json index 0d490a3a1f..65169be68c 100644 --- a/src/effects/overview/metadata.json +++ b/src/effects/overview/metadata.json @@ -68,6 +68,7 @@ "Name[zh_CN]": "桌面概览" }, "X-KDE-ConfigModule": "kwin_overview_config", + "X-KWin-Border-Activate": true, "org.kde.kwin.effect": { "video": "https://files.kde.org/plasma/kwin/effect-videos/present_windows.mp4" } diff --git a/src/effects/overview/overviewconfig.kcfg b/src/effects/overview/overviewconfig.kcfg index 54751d6246..4614cefcfb 100644 --- a/src/effects/overview/overviewconfig.kcfg +++ b/src/effects/overview/overviewconfig.kcfg @@ -9,7 +9,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 1 diff --git a/src/effects/presentwindows/presentwindows.kcfg b/src/effects/presentwindows/presentwindows.kcfg index a7631c5ffa..7032b0c51c 100644 --- a/src/effects/presentwindows/presentwindows.kcfg +++ b/src/effects/presentwindows/presentwindows.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 0 diff --git a/src/effects/sheet/sheet.kcfg b/src/effects/sheet/sheet.kcfg index 25574a5ac6..fc70ed4adb 100644 --- a/src/effects/sheet/sheet.kcfg +++ b/src/effects/sheet/sheet.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 0 diff --git a/src/effects/showfps/showfps.kcfg b/src/effects/showfps/showfps.kcfg index 71cec6e2b2..c1627eac76 100644 --- a/src/effects/showfps/showfps.kcfg +++ b/src/effects/showfps/showfps.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 0 diff --git a/src/effects/slide/slide.kcfg b/src/effects/slide/slide.kcfg index b2149802ee..183c7930fb 100644 --- a/src/effects/slide/slide.kcfg +++ b/src/effects/slide/slide.kcfg @@ -5,7 +5,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 0 diff --git a/src/effects/slidingpopups/slidingpopups.kcfg b/src/effects/slidingpopups/slidingpopups.kcfg index aa0a3ad3bd..ae9c6e436f 100644 --- a/src/effects/slidingpopups/slidingpopups.kcfg +++ b/src/effects/slidingpopups/slidingpopups.kcfg @@ -5,7 +5,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 0 diff --git a/src/effects/thumbnailaside/thumbnailaside.kcfg b/src/effects/thumbnailaside/thumbnailaside.kcfg index a44fb55649..7771e416f3 100644 --- a/src/effects/thumbnailaside/thumbnailaside.kcfg +++ b/src/effects/thumbnailaside/thumbnailaside.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 200 diff --git a/src/effects/trackmouse/trackmouse.kcfg b/src/effects/trackmouse/trackmouse.kcfg index 6be749399e..3795657318 100644 --- a/src/effects/trackmouse/trackmouse.kcfg +++ b/src/effects/trackmouse/trackmouse.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + true diff --git a/src/effects/wobblywindows/wobblywindows.kcfg b/src/effects/wobblywindows/wobblywindows.kcfg index cacab17ccf..15b954462c 100644 --- a/src/effects/wobblywindows/wobblywindows.kcfg +++ b/src/effects/wobblywindows/wobblywindows.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 0 diff --git a/src/effects/zoom/zoom.kcfg b/src/effects/zoom/zoom.kcfg index 97a022dc39..63887e32aa 100644 --- a/src/effects/zoom/zoom.kcfg +++ b/src/effects/zoom/zoom.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 1.2 diff --git a/src/kcmkwin/kwinscreenedges/CMakeLists.txt b/src/kcmkwin/kwinscreenedges/CMakeLists.txt index 2a11f486f7..047a66089b 100644 --- a/src/kcmkwin/kwinscreenedges/CMakeLists.txt +++ b/src/kcmkwin/kwinscreenedges/CMakeLists.txt @@ -23,7 +23,7 @@ kcmutils_generate_module_data( ) ki18n_wrap_ui(kcm_kwinscreenedges_PART_SRCS main.ui) -kconfig_add_kcfg_files(kcm_kwinscreenedges_PART_SRCS kwinscreenedgesettings.kcfgc kwinscreenedgescriptsettings.kcfgc) +kconfig_add_kcfg_files(kcm_kwinscreenedges_PART_SRCS kwinscreenedgesettings.kcfgc kwinscreenedgescriptsettings.kcfgc kwinscreenedgeeffectsettings.kcfgc) add_library(kcm_kwinscreenedges MODULE ${kcm_kwinscreenedges_PART_SRCS}) set(kcm_screenedges_LIBS Qt::DBus @@ -54,7 +54,7 @@ kcmutils_generate_module_data( ) ki18n_wrap_ui(kcm_kwintouchscreenedges_PART_SRCS main.ui touch.ui) -kconfig_add_kcfg_files(kcm_kwintouchscreenedges_PART_SRCS kwintouchscreensettings.kcfgc kwintouchscreenscriptsettings.kcfgc) +kconfig_add_kcfg_files(kcm_kwintouchscreenedges_PART_SRCS kwintouchscreensettings.kcfgc kwintouchscreenscriptsettings.kcfgc kwintouchscreenedgeeffectsettings.kcfgc) add_library(kcm_kwintouchscreen MODULE ${kcm_kwintouchscreenedges_PART_SRCS}) target_link_libraries(kcm_kwintouchscreen ${X11_LIBRARIES} ${kcm_screenedges_LIBS}) diff --git a/src/kcmkwin/kwinscreenedges/kwinscreenedgeeffectsettings.kcfg b/src/kcmkwin/kwinscreenedges/kwinscreenedgeeffectsettings.kcfg new file mode 100644 index 0000000000..0383bd1962 --- /dev/null +++ b/src/kcmkwin/kwinscreenedges/kwinscreenedgeeffectsettings.kcfg @@ -0,0 +1,14 @@ + + + + + + + + ElectricNone + + + diff --git a/src/kcmkwin/kwinscreenedges/kwinscreenedgeeffectsettings.kcfgc b/src/kcmkwin/kwinscreenedges/kwinscreenedgeeffectsettings.kcfgc new file mode 100644 index 0000000000..c1fffd8530 --- /dev/null +++ b/src/kcmkwin/kwinscreenedges/kwinscreenedgeeffectsettings.kcfgc @@ -0,0 +1,7 @@ +File=kwinscreenedgeeffectsettings.kcfg +NameSpace=KWin +ClassName=KWinScreenEdgeEffectSettings +IncludeFiles=kwinglobals.h +Mutators=true +DefaultValueGetters=true +ParentInConstructor=true diff --git a/src/kcmkwin/kwinscreenedges/kwintouchscreenedgeeffectsettings.kcfg b/src/kcmkwin/kwinscreenedges/kwintouchscreenedgeeffectsettings.kcfg new file mode 100644 index 0000000000..9ee303e358 --- /dev/null +++ b/src/kcmkwin/kwinscreenedges/kwintouchscreenedgeeffectsettings.kcfg @@ -0,0 +1,14 @@ + + + + + + + + ElectricNone + + + diff --git a/src/kcmkwin/kwinscreenedges/kwintouchscreenedgeeffectsettings.kcfgc b/src/kcmkwin/kwinscreenedges/kwintouchscreenedgeeffectsettings.kcfgc new file mode 100644 index 0000000000..40c1a42b49 --- /dev/null +++ b/src/kcmkwin/kwinscreenedges/kwintouchscreenedgeeffectsettings.kcfgc @@ -0,0 +1,7 @@ +File=kwintouchscreenedgeeffectsettings.kcfg +NameSpace=KWin +ClassName=KWinTouchScreenEdgeEffectSettings +IncludeFiles=kwinglobals.h +Mutators=true +DefaultValueGetters=true +ParentInConstructor=true diff --git a/src/kcmkwin/kwinscreenedges/kwintouchscreensettings.kcfg b/src/kcmkwin/kwinscreenedges/kwintouchscreensettings.kcfg index 41d550f94f..e2fdc66e35 100644 --- a/src/kcmkwin/kwinscreenedges/kwintouchscreensettings.kcfg +++ b/src/kcmkwin/kwinscreenedges/kwintouchscreensettings.kcfg @@ -29,16 +29,6 @@ ElectricNone - - - ElectricNone - - - - - ElectricNone - - ElectricNone diff --git a/src/kcmkwin/kwinscreenedges/main.cpp b/src/kcmkwin/kwinscreenedges/main.cpp index bd48b33e0b..90ffa0c9a0 100644 --- a/src/kcmkwin/kwinscreenedges/main.cpp +++ b/src/kcmkwin/kwinscreenedges/main.cpp @@ -23,6 +23,7 @@ #include "kwinscreenedgeconfigform.h" #include "kwinscreenedgedata.h" +#include "kwinscreenedgeeffectsettings.h" #include "kwinscreenedgescriptsettings.h" #include "kwinscreenedgesettings.h" @@ -60,6 +61,9 @@ void KWinScreenEdgesConfig::load() for (KWinScreenEdgeScriptSettings *setting : qAsConst(m_scriptSettings)) { setting->load(); } + for (KWinScreenEdgeEffectSettings *setting : qAsConst(m_effectSettings)) { + setting->load(); + } monitorLoadSettings(); monitorLoadDefaultSettings(); @@ -76,6 +80,9 @@ void KWinScreenEdgesConfig::save() for (KWinScreenEdgeScriptSettings *setting : qAsConst(m_scriptSettings)) { setting->save(); } + for (KWinScreenEdgeEffectSettings *setting : qAsConst(m_effectSettings)) { + setting->save(); + } // Reload saved settings to ScreenEdge UI monitorLoadSettings(); @@ -89,9 +96,10 @@ void KWinScreenEdgesConfig::save() OrgKdeKwinEffectsInterface interface(QStringLiteral("org.kde.KWin"), QStringLiteral("/Effects"), QDBusConnection::sessionBus()); - interface.reconfigureEffect(QStringLiteral("overview")); interface.reconfigureEffect(QStringLiteral("presentwindows")); - interface.reconfigureEffect(QStringLiteral("desktopgrid")); + for (const auto &effectId : qAsConst(m_effects)) { + interface.reconfigureEffect(effectId); + } KCModule::save(); } @@ -122,25 +130,37 @@ void KWinScreenEdgesConfig::monitorInit() m_form->monitorAddItem(i18n("Activity Manager")); m_form->monitorAddItem(i18n("Application Launcher")); - // TODO: Find a better way to get the display name of the present windows, the - // desktop grid, and the overview effect. Maybe install metadata.json files? + // TODO: Find a better way to get the display name of the present windows, + // Maybe install metadata.json files? const QString presentWindowsName = i18n("Present Windows"); m_form->monitorAddItem(i18n("%1 - All Desktops", presentWindowsName)); m_form->monitorAddItem(i18n("%1 - Current Desktop", presentWindowsName)); m_form->monitorAddItem(i18n("%1 - Current Application", presentWindowsName)); - m_form->monitorAddItem(i18n("Desktop Grid")); m_form->monitorAddItem(i18n("Toggle window switching")); m_form->monitorAddItem(i18n("Toggle alternative window switching")); - m_form->monitorAddItem(i18n("Toggle Overview")); + KConfigGroup config(m_config, "Plugins"); + const auto effects = KPackage::PackageLoader::self()->listPackages(QStringLiteral("KWin/Script"), QStringLiteral("kwin/builtin-effects/")) << KPackage::PackageLoader::self()->listPackages(QStringLiteral("KWin/Script"), QStringLiteral("kwin/effects/")); + + for (const KPluginMetaData &effect : effects) { + if (!effect.value(QStringLiteral("X-KWin-Border-Activate"), false)) { + continue; + } + + if (!config.readEntry(effect.pluginId() + QStringLiteral("Enabled"), effect.isEnabledByDefault())) { + continue; + } + m_effects << effect.pluginId(); + m_form->monitorAddItem(effect.name()); + m_effectSettings[effect.pluginId()] = new KWinScreenEdgeEffectSettings(effect.pluginId(), this); + } const QString scriptFolder = QStringLiteral("kwin/scripts/"); const auto scripts = KPackage::PackageLoader::self()->listPackages(QStringLiteral("KWin/Script"), scriptFolder); - KConfigGroup config(m_config, "Plugins"); for (const KPluginMetaData &script : scripts) { - if (script.value(QStringLiteral("X-KWin-Border-Activate")) != QLatin1String("true")) { + if (script.value(QStringLiteral("X-KWin-Border-Activate")) != true) { continue; } @@ -178,21 +198,22 @@ void KWinScreenEdgesConfig::monitorLoadSettings() // PresentWindows BorderActivateClass m_form->monitorChangeEdge(m_data->settings()->borderActivateClass(), PresentWindowsClass); - // Desktop Grid - m_form->monitorChangeEdge(m_data->settings()->borderActivateDesktopGrid(), DesktopGrid); - // TabBox m_form->monitorChangeEdge(m_data->settings()->borderActivateTabBox(), TabBox); // Alternative TabBox m_form->monitorChangeEdge(m_data->settings()->borderAlternativeActivate(), TabBoxAlternative); - // Overview - m_form->monitorChangeEdge(m_data->settings()->borderActivateOverview(), Overview); + // Dinamically loaded effects + int lastIndex = EffectCount; + for (int i = 0; i < m_effects.size(); i++) { + m_form->monitorChangeEdge(m_effectSettings[m_effects[i]]->borderActivate(), lastIndex); + ++lastIndex; + } // Scripts for (int i = 0; i < m_scripts.size(); i++) { - int index = EffectCount + i; - m_form->monitorChangeEdge(m_scriptSettings[m_scripts[i]]->borderActivate(), index); + m_form->monitorChangeEdge(m_scriptSettings[m_scripts[i]]->borderActivate(), lastIndex); + ++lastIndex; } } @@ -219,16 +240,10 @@ void KWinScreenEdgesConfig::monitorLoadDefaultSettings() // PresentWindows BorderActivateClass m_form->monitorChangeDefaultEdge(m_data->settings()->defaultBorderActivateClassValue(), PresentWindowsClass); - // Desktop Grid - m_form->monitorChangeDefaultEdge(m_data->settings()->defaultBorderActivateDesktopGridValue(), DesktopGrid); - // TabBox m_form->monitorChangeDefaultEdge(m_data->settings()->defaultBorderActivateTabBoxValue(), TabBox); // Alternative TabBox m_form->monitorChangeDefaultEdge(m_data->settings()->defaultBorderAlternativeActivateValue(), TabBoxAlternative); - - // Overview - m_form->monitorChangeDefaultEdge(m_data->settings()->defaultBorderActivateOverviewValue(), Overview); } void KWinScreenEdgesConfig::monitorSaveSettings() @@ -250,20 +265,21 @@ void KWinScreenEdgesConfig::monitorSaveSettings() m_data->settings()->setBorderActivatePresentWindows(m_form->monitorCheckEffectHasEdge(PresentWindowsCurrent)); m_data->settings()->setBorderActivateClass(m_form->monitorCheckEffectHasEdge(PresentWindowsClass)); - // Desktop Grid - m_data->settings()->setBorderActivateDesktopGrid(m_form->monitorCheckEffectHasEdge(DesktopGrid)); - // TabBox m_data->settings()->setBorderActivateTabBox(m_form->monitorCheckEffectHasEdge(TabBox)); m_data->settings()->setBorderAlternativeActivate(m_form->monitorCheckEffectHasEdge(TabBoxAlternative)); - // Overview - m_data->settings()->setBorderActivateOverview(m_form->monitorCheckEffectHasEdge(Overview)); + // Dinamically loaded effects + int lastIndex = EffectCount; + for (int i = 0; i < m_effects.size(); i++) { + m_effectSettings[m_effects[i]]->setBorderActivate(m_form->monitorCheckEffectHasEdge(lastIndex)); + ++lastIndex; + } // Scripts for (int i = 0; i < m_scripts.size(); i++) { - int index = EffectCount + i; - m_scriptSettings[m_scripts[i]]->setBorderActivate(m_form->monitorCheckEffectHasEdge(index)); + m_scriptSettings[m_scripts[i]]->setBorderActivate(m_form->monitorCheckEffectHasEdge(lastIndex)); + ++lastIndex; } } @@ -277,14 +293,6 @@ void KWinScreenEdgesConfig::monitorShowEvent() m_form->monitorItemSetEnabled(PresentWindowsCurrent, enabled); m_form->monitorItemSetEnabled(PresentWindowsAll, enabled); - // Desktop Grid - enabled = config.readEntry("desktopgridEnabled", true); - m_form->monitorItemSetEnabled(DesktopGrid, enabled); - - // Overview - enabled = config.readEntry("overviewEnabled", true); - m_form->monitorItemSetEnabled(Overview, enabled); - // tabbox, depends on reasonable focus policy. KConfigGroup config2(m_config, "Windows"); QString focusPolicy = config2.readEntry("FocusPolicy", QString()); diff --git a/src/kcmkwin/kwinscreenedges/main.h b/src/kcmkwin/kwinscreenedges/main.h index b0f1629972..afd662fb02 100644 --- a/src/kcmkwin/kwinscreenedges/main.h +++ b/src/kcmkwin/kwinscreenedges/main.h @@ -23,6 +23,7 @@ namespace KWin class KWinScreenEdgeData; class KWinScreenEdgesConfigForm; class KWinScreenEdgeScriptSettings; +class KWinScreenEdgeEffectSettings; class KWinScreenEdgesConfig : public KCModule { @@ -43,18 +44,18 @@ protected: private: KWinScreenEdgesConfigForm *m_form; KSharedConfigPtr m_config; + QStringList m_effects; // list of effect IDs ordered in the list they are presented in the menu QStringList m_scripts; // list of script IDs ordered in the list they are presented in the menu QHash m_scriptSettings; + QHash m_effectSettings; KWinScreenEdgeData *m_data; enum EffectActions { PresentWindowsAll = ELECTRIC_ACTION_COUNT, // Start at the end of built in actions PresentWindowsCurrent, PresentWindowsClass, - DesktopGrid, TabBox, TabBoxAlternative, - Overview, EffectCount }; diff --git a/src/kcmkwin/kwinscreenedges/touch.cpp b/src/kcmkwin/kwinscreenedges/touch.cpp index c1288dc634..fd3b7763ff 100644 --- a/src/kcmkwin/kwinscreenedges/touch.cpp +++ b/src/kcmkwin/kwinscreenedges/touch.cpp @@ -23,6 +23,7 @@ #include "kwintouchscreendata.h" #include "kwintouchscreenedgeconfigform.h" +#include "kwintouchscreenedgeeffectsettings.h" #include "kwintouchscreenscriptsettings.h" #include "kwintouchscreensettings.h" @@ -57,6 +58,9 @@ void KWinScreenEdgesConfig::load() for (KWinTouchScreenScriptSettings *setting : qAsConst(m_scriptSettings)) { setting->load(); } + for (KWinTouchScreenEdgeEffectSettings *setting : qAsConst(m_effectSettings)) { + setting->load(); + } monitorLoadSettings(); monitorLoadDefaultSettings(); @@ -70,6 +74,9 @@ void KWinScreenEdgesConfig::save() for (KWinTouchScreenScriptSettings *setting : qAsConst(m_scriptSettings)) { setting->save(); } + for (KWinTouchScreenEdgeEffectSettings *setting : qAsConst(m_effectSettings)) { + setting->save(); + } // Reload saved settings to ScreenEdge UI monitorLoadSettings(); @@ -82,9 +89,10 @@ void KWinScreenEdgesConfig::save() OrgKdeKwinEffectsInterface interface(QStringLiteral("org.kde.KWin"), QStringLiteral("/Effects"), QDBusConnection::sessionBus()); - interface.reconfigureEffect(QStringLiteral("overview")); interface.reconfigureEffect(QStringLiteral("presentwindows")); - interface.reconfigureEffect(QStringLiteral("desktopgrid")); + for (const auto &effectId : qAsConst(m_effects)) { + interface.reconfigureEffect(effectId); + } KCModule::save(); } @@ -120,32 +128,44 @@ void KWinScreenEdgesConfig::monitorInit() m_form->monitorAddItem(i18n("Activity Manager")); m_form->monitorAddItem(i18n("Application Launcher")); - // TODO: Find a better way to get the display name of the present windows, the - // desktop grid, and the overview effect. Maybe install metadata.json files? + // TODO: Find a better way to get the display name of the present windows, + // Maybe install metadata.json files? const QString presentWindowsName = i18n("Present Windows"); m_form->monitorAddItem(i18n("%1 - All Desktops", presentWindowsName)); m_form->monitorAddItem(i18n("%1 - Current Desktop", presentWindowsName)); m_form->monitorAddItem(i18n("%1 - Current Application", presentWindowsName)); - m_form->monitorAddItem(i18n("Desktop Grid")); m_form->monitorAddItem(i18n("Toggle window switching")); m_form->monitorAddItem(i18n("Toggle alternative window switching")); - m_form->monitorAddItem(i18n("Toggle Overview")); + KConfigGroup config(m_config, "Plugins"); + const auto effects = KPackage::PackageLoader::self()->listPackages(QStringLiteral("KWin/Script"), QStringLiteral("kwin/builtin-effects/")) << KPackage::PackageLoader::self()->listPackages(QStringLiteral("KWin/Script"), QStringLiteral("kwin/effects/")); + + for (const KPluginMetaData &effect : effects) { + if (!effect.value(QStringLiteral("X-KWin-Border-Activate"), false)) { + continue; + } + + if (!config.readEntry(effect.pluginId() + QStringLiteral("Enabled"), effect.isEnabledByDefault())) { + continue; + } + m_effects << effect.pluginId(); + m_form->monitorAddItem(effect.name()); + m_effectSettings[effect.pluginId()] = new KWinTouchScreenEdgeEffectSettings(effect.pluginId(), this); + } const QString scriptFolder = QStringLiteral("kwin/scripts/"); const auto scripts = KPackage::PackageLoader::self()->listPackages(QStringLiteral("KWin/Script"), scriptFolder); - KConfigGroup config(m_config, "Plugins"); for (const KPluginMetaData &script : scripts) { - if (script.value(QStringLiteral("X-KWin-Border-Activate")) != QLatin1String("true")) { + if (script.value(QStringLiteral("X-KWin-Border-Activate")) != true) { continue; } if (!config.readEntry(script.pluginId() + QStringLiteral("Enabled"), script.isEnabledByDefault())) { continue; } - m_scripts << script.pluginId(); + m_effects << script.pluginId(); m_form->monitorAddItem(script.name()); m_scriptSettings[script.pluginId()] = new KWinTouchScreenScriptSettings(script.pluginId(), this); } @@ -170,21 +190,22 @@ void KWinScreenEdgesConfig::monitorLoadSettings() // PresentWindows BorderActivateClass m_form->monitorChangeEdge(m_data->settings()->touchBorderActivateClass(), PresentWindowsClass); - // Desktop Grid BorderActivate - m_form->monitorChangeEdge(m_data->settings()->touchBorderActivateDesktopGrid(), DesktopGrid); - // TabBox BorderActivate m_form->monitorChangeEdge(m_data->settings()->touchBorderActivateTabBox(), TabBox); // Alternative TabBox m_form->monitorChangeEdge(m_data->settings()->touchBorderAlternativeActivate(), TabBoxAlternative); - // Overview - m_form->monitorChangeEdge(m_data->settings()->touchBorderActivateOverview(), Overview); + // Dinamically loaded effects + int lastIndex = EffectCount; + for (int i = 0; i < m_effects.size(); i++) { + m_form->monitorChangeEdge(m_effectSettings[m_effects[i]]->touchBorderActivate(), lastIndex); + ++lastIndex; + } // Scripts for (int i = 0; i < m_scripts.size(); i++) { - int index = EffectCount + i; - m_form->monitorChangeEdge(m_scriptSettings[m_scripts[i]]->touchBorderActivate(), index); + m_form->monitorChangeEdge(m_scriptSettings[m_scripts[i]]->touchBorderActivate(), lastIndex); + ++lastIndex; } } @@ -202,16 +223,10 @@ void KWinScreenEdgesConfig::monitorLoadDefaultSettings() // PresentWindows BorderActivateClass m_form->monitorChangeDefaultEdge(m_data->settings()->defaultTouchBorderActivateClassValue(), PresentWindowsClass); - // Desktop Grid BorderActivate - m_form->monitorChangeDefaultEdge(m_data->settings()->defaultTouchBorderActivateDesktopGridValue(), DesktopGrid); - // TabBox BorderActivate m_form->monitorChangeDefaultEdge(m_data->settings()->defaultTouchBorderActivateTabBoxValue(), TabBox); // Alternative TabBox m_form->monitorChangeDefaultEdge(m_data->settings()->defaultTouchBorderAlternativeActivateValue(), TabBoxAlternative); - - // Overview - m_form->monitorChangeDefaultEdge(m_data->settings()->defaultTouchBorderActivateOverviewValue(), Overview); } void KWinScreenEdgesConfig::monitorSaveSettings() @@ -229,20 +244,21 @@ void KWinScreenEdgesConfig::monitorSaveSettings() m_data->settings()->setTouchBorderActivatePresentWindows(m_form->monitorCheckEffectHasEdge(PresentWindowsCurrent)); m_data->settings()->setTouchBorderActivateClass(m_form->monitorCheckEffectHasEdge(PresentWindowsClass)); - // Desktop Grid - m_data->settings()->setTouchBorderActivateDesktopGrid(m_form->monitorCheckEffectHasEdge(DesktopGrid)); - // TabBox m_data->settings()->setTouchBorderActivateTabBox(m_form->monitorCheckEffectHasEdge(TabBox)); m_data->settings()->setTouchBorderAlternativeActivate(m_form->monitorCheckEffectHasEdge(TabBoxAlternative)); - // Overview - m_data->settings()->setTouchBorderActivateOverview(m_form->monitorCheckEffectHasEdge(Overview)); + // Dinamically loaded effects + int lastIndex = EffectCount; + for (int i = 0; i < m_effects.size(); i++) { + m_effectSettings[m_effects[i]]->setTouchBorderActivate(m_form->monitorCheckEffectHasEdge(lastIndex)); + ++lastIndex; + } // Scripts for (int i = 0; i < m_scripts.size(); i++) { - int index = EffectCount + i; - m_scriptSettings[m_scripts[i]]->setTouchBorderActivate(m_form->monitorCheckEffectHasEdge(index)); + m_scriptSettings[m_scripts[i]]->setTouchBorderActivate(m_form->monitorCheckEffectHasEdge(lastIndex)); + ++lastIndex; } } @@ -256,14 +272,6 @@ void KWinScreenEdgesConfig::monitorShowEvent() m_form->monitorItemSetEnabled(PresentWindowsCurrent, enabled); m_form->monitorItemSetEnabled(PresentWindowsAll, enabled); - // Desktop Grid - enabled = config.readEntry("desktopgridEnabled", true); - m_form->monitorItemSetEnabled(DesktopGrid, enabled); - - // Overview - enabled = config.readEntry("overviewEnabled", true); - m_form->monitorItemSetEnabled(Overview, enabled); - // tabbox, depends on reasonable focus policy. KConfigGroup config2(m_config, "Windows"); QString focusPolicy = config2.readEntry("FocusPolicy", QString()); diff --git a/src/kcmkwin/kwinscreenedges/touch.h b/src/kcmkwin/kwinscreenedges/touch.h index edf7ecf28d..31fac0ac52 100644 --- a/src/kcmkwin/kwinscreenedges/touch.h +++ b/src/kcmkwin/kwinscreenedges/touch.h @@ -23,6 +23,7 @@ namespace KWin class KWinTouchScreenData; class KWinTouchScreenEdgeConfigForm; class KWinTouchScreenScriptSettings; +class KWinTouchScreenEdgeEffectSettings; class KWinScreenEdgesConfig : public KCModule { @@ -43,18 +44,18 @@ protected: private: KWinTouchScreenEdgeConfigForm *m_form; KSharedConfigPtr m_config; + QStringList m_effects; // list of effect IDs ordered in the list they are presented in the menu QStringList m_scripts; // list of script IDs ordered in the list they are presented in the menu QHash m_scriptSettings; + QHash m_effectSettings; KWinTouchScreenData *m_data; enum EffectActions { PresentWindowsAll = ELECTRIC_ACTION_COUNT, // Start at the end of built in actions PresentWindowsCurrent, PresentWindowsClass, - DesktopGrid, TabBox, TabBoxAlternative, - Overview, EffectCount };