[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