Add support for new touch screen edge actions to declarative KWin scripts
Summary: This change introduces a new property mode in ScreenEdgeItem to switch between Pointer and Touch mode. The touch mode interacts with the new touch screen edge gestures through a QAction. Test Plan: New test case added Reviewers: #kwin, #plasma Subscribers: plasma-devel Tags: #plasma Differential Revision: https://phabricator.kde.org/D5272icc-effect-5.14.5
parent
c080dca8ec
commit
63b1138307
|
@ -50,6 +50,7 @@ private Q_SLOTS:
|
|||
void testEdge_data();
|
||||
void testEdge();
|
||||
void testEdgeUnregister();
|
||||
void testDeclarativeTouchEdge();
|
||||
|
||||
private:
|
||||
void triggerConfigReload();
|
||||
|
@ -213,5 +214,29 @@ void ScreenEdgeTest::testEdgeUnregister()
|
|||
triggerConfigReload();
|
||||
}
|
||||
|
||||
void ScreenEdgeTest::testDeclarativeTouchEdge()
|
||||
{
|
||||
const QString scriptToLoad = QFINDTESTDATA("./scripts/screenedgetouch.qml");
|
||||
QVERIFY(!scriptToLoad.isEmpty());
|
||||
QVERIFY(Scripting::self()->loadDeclarativeScript(scriptToLoad) != -1);
|
||||
QVERIFY(Scripting::self()->isScriptLoaded(scriptToLoad));
|
||||
|
||||
auto s = Scripting::self()->findScript(scriptToLoad);
|
||||
QSignalSpy runningChangedSpy(s, &AbstractScript::runningChanged);
|
||||
s->run();
|
||||
QTRY_COMPARE(runningChangedSpy.count(), 1);
|
||||
|
||||
QSignalSpy showDesktopSpy(workspace(), &Workspace::showingDesktopChanged);
|
||||
QVERIFY(showDesktopSpy.isValid());
|
||||
|
||||
// Trigger the edge through touch
|
||||
quint32 timestamp = 0;
|
||||
kwinApp()->platform()->touchDown(0, QPointF(0, 50), timestamp++);
|
||||
kwinApp()->platform()->touchMotion(0, QPointF(500, 50), timestamp++);
|
||||
kwinApp()->platform()->touchUp(0, timestamp++);
|
||||
|
||||
QVERIFY(showDesktopSpy.wait());
|
||||
}
|
||||
|
||||
WAYLANDTEST_MAIN(ScreenEdgeTest)
|
||||
#include "screenedge_test.moc"
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
import QtQuick 2.0;
|
||||
import org.kde.kwin 2.0;
|
||||
|
||||
ScreenEdgeItem {
|
||||
edge: ScreenEdgeItem.LeftEdge
|
||||
mode: ScreenEdgeItem.Touch
|
||||
onActivated: {
|
||||
workspace.slotToggleShowDesktop();
|
||||
}
|
||||
}
|
|
@ -21,6 +21,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
#include <config-kwin.h>
|
||||
#include "screenedge.h"
|
||||
|
||||
#include <QAction>
|
||||
|
||||
namespace KWin
|
||||
{
|
||||
|
||||
|
@ -28,7 +30,9 @@ ScreenEdgeItem::ScreenEdgeItem(QObject* parent)
|
|||
: QObject(parent)
|
||||
, m_enabled(true)
|
||||
, m_edge(NoEdge)
|
||||
, m_action(new QAction(this))
|
||||
{
|
||||
connect(m_action, &QAction::triggered, this, &ScreenEdgeItem::activated);
|
||||
}
|
||||
|
||||
ScreenEdgeItem::~ScreenEdgeItem()
|
||||
|
@ -62,7 +66,16 @@ void ScreenEdgeItem::enableEdge()
|
|||
if (!m_enabled || m_edge == NoEdge) {
|
||||
return;
|
||||
}
|
||||
ScreenEdges::self()->reserve(static_cast<ElectricBorder>(m_edge), this, "borderActivated");
|
||||
switch (m_mode) {
|
||||
case Mode::Pointer:
|
||||
ScreenEdges::self()->reserve(static_cast<ElectricBorder>(m_edge), this, "borderActivated");
|
||||
break;
|
||||
case Mode::Touch:
|
||||
ScreenEdges::self()->reserveTouch(static_cast<ElectricBorder>(m_edge), m_action);
|
||||
break;
|
||||
default:
|
||||
Q_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
void ScreenEdgeItem::disableEdge()
|
||||
|
@ -70,7 +83,16 @@ void ScreenEdgeItem::disableEdge()
|
|||
if (!m_enabled || m_edge == NoEdge) {
|
||||
return;
|
||||
}
|
||||
ScreenEdges::self()->unreserve(static_cast<ElectricBorder>(m_edge), this);
|
||||
switch (m_mode) {
|
||||
case Mode::Pointer:
|
||||
ScreenEdges::self()->unreserve(static_cast<ElectricBorder>(m_edge), this);
|
||||
break;
|
||||
case Mode::Touch:
|
||||
ScreenEdges::self()->unreserveTouch(static_cast<ElectricBorder>(m_edge), m_action);
|
||||
break;
|
||||
default:
|
||||
Q_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
bool ScreenEdgeItem::borderActivated(ElectricBorder edge)
|
||||
|
@ -82,4 +104,15 @@ bool ScreenEdgeItem::borderActivated(ElectricBorder edge)
|
|||
return true;
|
||||
}
|
||||
|
||||
void ScreenEdgeItem::setMode(Mode mode)
|
||||
{
|
||||
if (m_mode == mode) {
|
||||
return;
|
||||
}
|
||||
disableEdge();
|
||||
m_mode = mode;
|
||||
enableEdge();
|
||||
emit modeChanged();
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
|
|
@ -23,6 +23,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
#include <QObject>
|
||||
#include <kwinglobals.h>
|
||||
|
||||
class QAction;
|
||||
|
||||
namespace KWin
|
||||
{
|
||||
|
||||
|
@ -46,6 +48,7 @@ class ScreenEdgeItem : public QObject
|
|||
{
|
||||
Q_OBJECT
|
||||
Q_ENUMS(Edge)
|
||||
Q_ENUMS(Mode)
|
||||
/**
|
||||
* @brief Whether the edge is currently enabled, that is reserved. Default value is @c true.
|
||||
*
|
||||
|
@ -56,6 +59,10 @@ class ScreenEdgeItem : public QObject
|
|||
*
|
||||
*/
|
||||
Q_PROPERTY(Edge edge READ edge WRITE setEdge NOTIFY edgeChanged)
|
||||
/**
|
||||
* @brief The operation mode for this edge. Default value is @c Mode::Pointer
|
||||
**/
|
||||
Q_PROPERTY(Mode mode READ mode WRITE setMode NOTIFY modeChanged)
|
||||
public:
|
||||
enum Edge {
|
||||
TopEdge,
|
||||
|
@ -69,18 +76,30 @@ public:
|
|||
EDGE_COUNT,
|
||||
NoEdge
|
||||
};
|
||||
/**
|
||||
* Enum describing the operation modes of the edge.
|
||||
**/
|
||||
enum class Mode {
|
||||
Pointer,
|
||||
Touch
|
||||
};
|
||||
explicit ScreenEdgeItem(QObject *parent = 0);
|
||||
virtual ~ScreenEdgeItem();
|
||||
bool isEnabled() const;
|
||||
Edge edge() const;
|
||||
Mode mode() const {
|
||||
return m_mode;
|
||||
}
|
||||
|
||||
public Q_SLOTS:
|
||||
void setEnabled(bool enabled);
|
||||
void setEdge(Edge edge);
|
||||
void setMode(Mode mode);
|
||||
|
||||
Q_SIGNALS:
|
||||
void enabledChanged();
|
||||
void edgeChanged();
|
||||
void modeChanged();
|
||||
|
||||
void activated();
|
||||
|
||||
|
@ -91,6 +110,8 @@ private:
|
|||
void disableEdge();
|
||||
bool m_enabled;
|
||||
Edge m_edge;
|
||||
Mode m_mode = Mode::Pointer;
|
||||
QAction *m_action;
|
||||
};
|
||||
|
||||
inline bool ScreenEdgeItem::isEnabled() const
|
||||
|
|
Loading…
Reference in New Issue