KWin
Loading...
Searching...
No Matches
kwinscreenedge.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: 2009 Lucas Murray <lmurray@undefinedfire.com>
6 SPDX-FileCopyrightText: 2020 Cyril Rossi <cyril.rossi@enioka.com>
7
8 SPDX-License-Identifier: GPL-2.0-or-later
9*/
10
11#include "kwinscreenedge.h"
12
13#include "monitor.h"
14
15namespace KWin
16{
17
19 : QWidget(parent)
20{
21 QMetaObject::invokeMethod(this, &KWinScreenEdge::createConnection, Qt::QueuedConnection);
22}
23
27
29{
30 const int edge = KWinScreenEdge::electricBorderToMonitorEdge(border);
31 monitor()->setEdgeHidden(edge, hidden);
32}
33
35{
36 const int edge = KWinScreenEdge::electricBorderToMonitorEdge(border);
37 monitor()->setEdgeEnabled(edge, enabled);
38}
39
40void KWinScreenEdge::monitorAddItem(const QString &item)
41{
42 for (int i = 0; i < 8; i++) {
43 monitor()->addEdgeItem(i, item);
44 }
45}
46
47void KWinScreenEdge::monitorItemSetEnabled(int index, bool enabled)
48{
49 for (int i = 0; i < 8; i++) {
50 monitor()->setEdgeItemEnabled(i, index, enabled);
51 }
52}
53
54void KWinScreenEdge::monitorChangeEdge(const QList<int> &borderList, int index)
55{
56 for (int border : borderList) {
57 monitorChangeEdge(static_cast<ElectricBorder>(border), index);
58 }
59}
60
62{
63 if (ELECTRIC_COUNT == border || ElectricNone == border) {
64 return;
65 }
66 m_reference[border] = index;
67 monitor()->selectEdgeItem(KWinScreenEdge::electricBorderToMonitorEdge(border), index);
68}
69
71{
72 QList<int> list;
73 if (monitor()->selectedEdgeItem(Monitor::Top) == index) {
74 list.append(ElectricTop);
75 }
76 if (monitor()->selectedEdgeItem(Monitor::TopRight) == index) {
77 list.append(ElectricTopRight);
78 }
79 if (monitor()->selectedEdgeItem(Monitor::Right) == index) {
80 list.append(ElectricRight);
81 }
82 if (monitor()->selectedEdgeItem(Monitor::BottomRight) == index) {
83 list.append(ElectricBottomRight);
84 }
85 if (monitor()->selectedEdgeItem(Monitor::Bottom) == index) {
86 list.append(ElectricBottom);
87 }
88 if (monitor()->selectedEdgeItem(Monitor::BottomLeft) == index) {
89 list.append(ElectricBottomLeft);
90 }
91 if (monitor()->selectedEdgeItem(Monitor::Left) == index) {
92 list.append(ElectricLeft);
93 }
94 if (monitor()->selectedEdgeItem(Monitor::TopLeft) == index) {
95 list.append(ElectricTopLeft);
96 }
97
98 if (list.isEmpty()) {
99 list.append(ElectricNone);
100 }
101 return list;
102}
103
105{
106 return monitor()->selectedEdgeItem(KWinScreenEdge::electricBorderToMonitorEdge(border));
107}
108
110{
111 if (ELECTRIC_COUNT == border || ElectricNone == border) {
112 return;
113 }
114 m_default[border] = index;
115}
116
117void KWinScreenEdge::monitorChangeDefaultEdge(const QList<int> &borderList, int index)
118{
119 for (int border : borderList) {
120 monitorChangeDefaultEdge(static_cast<ElectricBorder>(border), index);
121 }
122}
123
125{
126 for (auto it = m_reference.cbegin(); it != m_reference.cend(); ++it) {
127 monitor()->selectEdgeItem(KWinScreenEdge::electricBorderToMonitorEdge(it.key()), it.value());
128 }
129 onChanged();
130}
131
133{
134 for (auto it = m_default.cbegin(); it != m_default.cend(); ++it) {
135 monitor()->selectEdgeItem(KWinScreenEdge::electricBorderToMonitorEdge(it.key()), it.value());
136 }
137 onChanged();
138}
139
140int KWinScreenEdge::electricBorderToMonitorEdge(ElectricBorder border)
141{
142 switch (border) {
143 case ElectricTop:
144 return Monitor::Top;
145 case ElectricTopRight:
146 return Monitor::TopRight;
147 case ElectricRight:
148 return Monitor::Right;
151 case ElectricBottom:
152 return Monitor::Bottom;
154 return Monitor::BottomLeft;
155 case ElectricLeft:
156 return Monitor::Left;
157 case ElectricTopLeft:
158 return Monitor::TopLeft;
159 default: // ELECTRIC_COUNT and ElectricNone
160 return Monitor::None;
161 }
162}
163
164ElectricBorder KWinScreenEdge::monitorEdgeToElectricBorder(int edge)
165{
166 const Monitor::Edges monitorEdge = static_cast<Monitor::Edges>(edge);
167 switch (monitorEdge) {
168 case Monitor::Left:
169 return ElectricLeft;
170 case Monitor::Right:
171 return ElectricRight;
172 case Monitor::Top:
173 return ElectricTop;
174 case Monitor::Bottom:
175 return ElectricBottom;
176 case Monitor::TopLeft:
177 return ElectricTopLeft;
179 return ElectricTopRight;
181 return ElectricBottomLeft;
183 return ElectricBottomRight;
184 default:
185 return ElectricNone;
186 }
187}
188
190{
191 bool needSave = isSaveNeeded();
192 for (auto it = m_reference.cbegin(); it != m_reference.cend(); ++it) {
193 needSave |= it.value() != monitor()->selectedEdgeItem(KWinScreenEdge::electricBorderToMonitorEdge(it.key()));
194 }
195 Q_EMIT saveNeededChanged(needSave);
196
197 bool defaults = isDefault();
198 for (auto it = m_default.cbegin(); it != m_default.cend(); ++it) {
199 defaults &= it.value() == monitor()->selectedEdgeItem(KWinScreenEdge::electricBorderToMonitorEdge(it.key()));
200 }
201 Q_EMIT defaultChanged(defaults);
202}
203
205{
206 connect(monitor(),
208 this,
210}
211
212bool KWinScreenEdge::isSaveNeeded() const
213{
214 return false;
215}
216
217bool KWinScreenEdge::isDefault() const
218{
219 return true;
220}
221
222} // namespace
223
224#include "moc_kwinscreenedge.cpp"
virtual void setDefaults()
void monitorItemSetEnabled(int index, bool enabled)
KWinScreenEdge(QWidget *parent=nullptr)
void defaultChanged(bool isDefault)
int selectedEdgeItem(ElectricBorder border) const
void saveNeededChanged(bool isNeeded)
void monitorAddItem(const QString &item)
void monitorChangeEdge(ElectricBorder border, int index)
void monitorChangeDefaultEdge(ElectricBorder border, int index)
void monitorHideEdge(ElectricBorder border, bool hidden)
QList< int > monitorCheckEffectHasEdge(int index) const
void monitorEnableEdge(ElectricBorder border, bool enabled)
int selectedEdgeItem(int edge) const
Definition monitor.cpp:166
void selectEdgeItem(int edge, int index)
Definition monitor.cpp:156
void addEdgeItem(int edge, const QString &item)
Definition monitor.cpp:133
void setEdgeEnabled(int edge, bool enabled)
Definition monitor.cpp:111
void setEdgeHidden(int edge, bool set)
Definition monitor.cpp:118
void setEdgeItemEnabled(int edge, int index, bool enabled)
Definition monitor.cpp:146
ElectricBorder
Definition globals.h:60
@ ElectricNone
Definition globals.h:70
@ ElectricTopLeft
Definition globals.h:68
@ ElectricBottomLeft
Definition globals.h:66
@ ElectricBottom
Definition globals.h:65
@ ElectricTopRight
Definition globals.h:62
@ ElectricTop
Definition globals.h:61
@ ElectricRight
Definition globals.h:63
@ ElectricBottomRight
Definition globals.h:64
@ ElectricLeft
Definition globals.h:67
@ ELECTRIC_COUNT
Definition globals.h:69