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