[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kwin/scripting2] /: Handle screen edges like a boss
From: David Edmundson <null () kde ! org>
Date: 2018-07-31 21:37:18
Message-ID: E1fkcKU-0001yG-KT () code ! kde ! org
[Download RAW message or body]
Git commit 8e335b05867a65ed8617e9f855e09090e6e7593b by David Edmundson.
Committed on 31/07/2018 at 20:28.
Pushed by davidedmundson into branch 'scripting2'.
Handle screen edges like a boss
M +1 -2 autotests/integration/effects/scripted_effects_test.cpp
M +5 -0 autotests/test_scripted_effectloader.cpp
M +32 -11 scripting/scriptedeffect.cpp
https://commits.kde.org/kwin/8e335b05867a65ed8617e9f855e09090e6e7593b
diff --git a/autotests/integration/effects/scripted_effects_test.cpp \
b/autotests/integration/effects/scripted_effects_test.cpp index c8a878ac3..cf57e33b7 \
100644
--- a/autotests/integration/effects/scripted_effects_test.cpp
+++ b/autotests/integration/effects/scripted_effects_test.cpp
@@ -334,8 +334,7 @@ void ScriptedEffectsTest::testScreenEdgeTouch()
auto *effect = new ScriptedEffectWithDebugSpy; // cleaned up in ::clean
QSignalSpy effectOutputSpy(effect, &ScriptedEffectWithDebugSpy::testOutput);
QVERIFY(effect->load("screenEdgeTouchTest"));
- auto actions = effect->findChildren<QAction*>(QString(), \
Qt::FindDirectChildrenOnly);
- actions[0]->trigger();
+ effect->actions()[0]->trigger();
QCOMPARE(effectOutputSpy.count(), 1);
}
diff --git a/autotests/test_scripted_effectloader.cpp \
b/autotests/test_scripted_effectloader.cpp index 988e70689..1d4d9893d 100644
--- a/autotests/test_scripted_effectloader.cpp
+++ b/autotests/test_scripted_effectloader.cpp
@@ -47,6 +47,11 @@ void ScreenEdges::reserve(ElectricBorder, QObject *, const char *)
{
}
+void ScreenEdges::unreserve(ElectricBorder, QObject *)
+{
+}
+
+
void ScreenEdges::reserveTouch(ElectricBorder, QAction *)
{
}
diff --git a/scripting/scriptedeffect.cpp b/scripting/scriptedeffect.cpp
index 15dcb73ef..3423c5a58 100644
--- a/scripting/scriptedeffect.cpp
+++ b/scripting/scriptedeffect.cpp
@@ -565,16 +565,6 @@ int ScriptedEffect::animationTime(int defaultTime) const
return Effect::animationTime(defaultTime);
}
-bool ScriptedEffect::registerScreenEdge(int edge, const QJSValue &callback)
-{
- return true;
-}
-
-bool ScriptedEffect::unregisterScreenEdge(int edge)
-{
- return true;
-}
-
int ScriptedEffect::displayWidth() const
{
return screens()->displaySize().width();
@@ -668,7 +658,13 @@ bool ScriptedEffect::registerShortcut(const QString &objectName, \
const QString &
bool ScriptedEffect::borderActivated(ElectricBorder edge)
{
-// screenEdgeActivated(this, edge);
+ auto it = screenEdgeCallbacks().constFind(edge);
+ if (it != screenEdgeCallbacks().constEnd()) {
+ foreach (const QJSValue &value, it.value()) {
+ QJSValue callback(value);
+ callback.call();
+ }
+ }
return true;
}
@@ -680,6 +676,31 @@ QVariant ScriptedEffect::readConfig(const QString &key, const \
QVariant defaultVa return m_config->property(key);
}
+bool ScriptedEffect::registerScreenEdge(int edge, const QJSValue &callback)
+{
+ auto it = screenEdgeCallbacks().find(edge);
+ if (it == screenEdgeCallbacks().end()) {
+ // not yet registered
+ ScreenEdges::self()->reserve(static_cast<KWin::ElectricBorder>(edge), this, \
"borderActivated"); + screenEdgeCallbacks().insert(edge, QList<QJSValue>() << \
callback); + } else {
+ it->append(callback);
+ }
+ return true;
+}
+
+bool ScriptedEffect::unregisterScreenEdge(int edge)
+{
+ auto it = screenEdgeCallbacks().find(edge);
+ if (it == screenEdgeCallbacks().end()) {
+ //not previously registered
+ return false;
+ }
+ ScreenEdges::self()->unreserve(static_cast<KWin::ElectricBorder>(edge), this);
+ screenEdgeCallbacks().erase(it);
+ return true;
+}
+
bool ScriptedEffect::registerTouchScreenEdge(int edge, const QJSValue &callback)
{
if (m_touchScreenEdgeCallbacks.constFind(edge) != \
m_touchScreenEdgeCallbacks.constEnd()) {
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic