KWin
Loading...
Searching...
No Matches
screenedgehandler.cpp
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 2013 Martin Gräßlin <mgraesslin@kde.org>
6
7 SPDX-License-Identifier: GPL-2.0-or-later
8*/
9#include "screenedgehandler.h"
10
11#include <config-kwin.h>
12
13#include "screenedge.h"
14#include "workspace.h"
15
16#include <QAction>
17
18namespace KWin
19{
20
22 : QObject(parent)
23 , m_enabled(true)
24 , m_edge(NoEdge)
25 , m_action(new QAction(this))
26{
27 connect(m_action, &QAction::triggered, this, &ScreenEdgeHandler::activated);
28}
29
33
35{
36 if (m_enabled == enabled) {
37 return;
38 }
39 disableEdge();
40 m_enabled = enabled;
41 enableEdge();
42 Q_EMIT enabledChanged();
43}
44
46{
47 if (m_edge == edge) {
48 return;
49 }
50 disableEdge();
51 m_edge = edge;
52 enableEdge();
53 Q_EMIT edgeChanged();
54}
55
56void ScreenEdgeHandler::enableEdge()
57{
58 if (!m_enabled || m_edge == NoEdge) {
59 return;
60 }
61 switch (m_mode) {
62 case Mode::Pointer:
63 workspace()->screenEdges()->reserve(static_cast<ElectricBorder>(m_edge), this, "borderActivated");
64 break;
65 case Mode::Touch:
66 workspace()->screenEdges()->reserveTouch(static_cast<ElectricBorder>(m_edge), m_action);
67 break;
68 default:
69 Q_UNREACHABLE();
70 }
71}
72
73void ScreenEdgeHandler::disableEdge()
74{
75 if (!m_enabled || m_edge == NoEdge) {
76 return;
77 }
78 switch (m_mode) {
79 case Mode::Pointer:
80 workspace()->screenEdges()->unreserve(static_cast<ElectricBorder>(m_edge), this);
81 break;
82 case Mode::Touch:
83 workspace()->screenEdges()->unreserveTouch(static_cast<ElectricBorder>(m_edge), m_action);
84 break;
85 default:
86 Q_UNREACHABLE();
87 }
88}
89
90bool ScreenEdgeHandler::borderActivated(ElectricBorder edge)
91{
92 if (edge != static_cast<ElectricBorder>(m_edge) || !m_enabled) {
93 return false;
94 }
95 Q_EMIT activated();
96 return true;
97}
98
100{
101 if (m_mode == mode) {
102 return;
103 }
104 disableEdge();
105 m_mode = mode;
106 enableEdge();
107 Q_EMIT modeChanged();
108}
109
110} // namespace
111
112#include "moc_screenedgehandler.cpp"
bool enabled
Whether the edge is currently enabled, that is reserved. Default value is true.
void setEnabled(bool enabled)
ScreenEdgeHandler(QObject *parent=nullptr)
Edge edge
Which of the screen edges is to be reserved. Default value is NoEdge.
Mode mode
The operation mode for this edge. Default value is Mode::Pointer.
void unreserveTouch(ElectricBorder border, QAction *action)
void reserve(ElectricBorder border, QObject *object, const char *callback)
void unreserve(ElectricBorder border, QObject *object)
void reserveTouch(ElectricBorder border, QAction *action, TouchCallback::CallbackFunction callback=nullptr)
ScreenEdges * screenEdges() const
ElectricBorder
Definition globals.h:60
Workspace * workspace()
Definition workspace.h:830