KWin
Loading...
Searching...
No Matches
previewclient.cpp
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
5*/
6#include "previewclient.h"
7#include <KDecoration2/DecoratedClient>
8#include <KDecoration2/Decoration>
9
10#include <QCoreApplication>
11#include <QDebug>
12#include <QEvent>
13#include <QModelIndex>
14
15namespace KDecoration2
16{
17namespace Preview
18{
19
20PreviewClient::PreviewClient(DecoratedClient *c, Decoration *decoration)
21 : QObject(decoration)
22 , ApplicationMenuEnabledDecoratedClientPrivate(c, decoration)
23 , m_icon(QIcon::fromTheme(QStringLiteral("start-here-kde")))
24 , m_iconName(m_icon.name())
25 , m_palette(QStringLiteral("kdeglobals"))
26 , m_active(true)
27 , m_closeable(true)
28 , m_keepBelow(false)
29 , m_keepAbove(false)
30 , m_maximizable(true)
31 , m_maximizedHorizontally(false)
32 , m_maximizedVertically(false)
33 , m_minimizable(true)
34 , m_modal(false)
35 , m_movable(true)
36 , m_resizable(true)
37 , m_shadeable(true)
38 , m_shaded(false)
39 , m_providesContextHelp(false)
40 , m_onAllDesktops(false)
41 , m_width(0)
42 , m_height(0)
43 , m_bordersTopEdge(false)
44 , m_bordersLeftEdge(false)
45 , m_bordersRightEdge(false)
46 , m_bordersBottomEdge(false)
47{
48 connect(this, &PreviewClient::captionChanged, c, &DecoratedClient::captionChanged);
49 connect(this, &PreviewClient::activeChanged, c, &DecoratedClient::activeChanged);
50 connect(this, &PreviewClient::closeableChanged, c, &DecoratedClient::closeableChanged);
51 connect(this, &PreviewClient::keepAboveChanged, c, &DecoratedClient::keepAboveChanged);
52 connect(this, &PreviewClient::keepBelowChanged, c, &DecoratedClient::keepBelowChanged);
53 connect(this, &PreviewClient::maximizableChanged, c, &DecoratedClient::maximizeableChanged);
54 connect(this, &PreviewClient::maximizedChanged, c, &DecoratedClient::maximizedChanged);
55 connect(this, &PreviewClient::maximizedVerticallyChanged, c, &DecoratedClient::maximizedVerticallyChanged);
56 connect(this, &PreviewClient::maximizedHorizontallyChanged, c, &DecoratedClient::maximizedHorizontallyChanged);
57 connect(this, &PreviewClient::minimizableChanged, c, &DecoratedClient::minimizeableChanged);
58 connect(this, &PreviewClient::movableChanged, c, &DecoratedClient::moveableChanged);
59 connect(this, &PreviewClient::onAllDesktopsChanged, c, &DecoratedClient::onAllDesktopsChanged);
60 connect(this, &PreviewClient::resizableChanged, c, &DecoratedClient::resizeableChanged);
61 connect(this, &PreviewClient::shadeableChanged, c, &DecoratedClient::shadeableChanged);
62 connect(this, &PreviewClient::shadedChanged, c, &DecoratedClient::shadedChanged);
63 connect(this, &PreviewClient::providesContextHelpChanged, c, &DecoratedClient::providesContextHelpChanged);
64 connect(this, &PreviewClient::widthChanged, c, &DecoratedClient::widthChanged);
65 connect(this, &PreviewClient::heightChanged, c, &DecoratedClient::heightChanged);
66 connect(this, &PreviewClient::iconChanged, c, &DecoratedClient::iconChanged);
67 connect(this, &PreviewClient::paletteChanged, c, &DecoratedClient::paletteChanged);
68 connect(this, &PreviewClient::maximizedVerticallyChanged, this, [this]() {
70 });
71 connect(this, &PreviewClient::maximizedHorizontallyChanged, this, [this]() {
73 });
74 connect(this, &PreviewClient::iconNameChanged, this, [this]() {
75 m_icon = QIcon::fromTheme(m_iconName);
76 Q_EMIT iconChanged(m_icon);
77 });
78 connect(&m_palette, &KWin::Decoration::DecorationPalette::changed, this, [this]() {
79 Q_EMIT paletteChanged(m_palette.palette());
80 });
81 auto emitEdgesChanged = [this, c]() {
82 Q_EMIT c->adjacentScreenEdgesChanged(adjacentScreenEdges());
83 };
84 connect(this, &PreviewClient::bordersTopEdgeChanged, this, emitEdgesChanged);
85 connect(this, &PreviewClient::bordersLeftEdgeChanged, this, emitEdgesChanged);
86 connect(this, &PreviewClient::bordersRightEdgeChanged, this, emitEdgesChanged);
87 connect(this, &PreviewClient::bordersBottomEdgeChanged, this, emitEdgesChanged);
88 auto emitSizeChanged = [c]() {
89 Q_EMIT c->sizeChanged(c->size());
90 };
91 connect(this, &PreviewClient::widthChanged, this, emitSizeChanged);
92 connect(this, &PreviewClient::heightChanged, this, emitSizeChanged);
93
94 qApp->installEventFilter(this);
95}
96
98
99void PreviewClient::setIcon(const QIcon &pixmap)
100{
101 m_icon = pixmap;
102 Q_EMIT iconChanged(m_icon);
103}
104
106{
107 return m_width;
108}
109
111{
112 return m_height;
113}
114
116{
117 return QSize(m_width, m_height);
118}
119
121{
122 return m_caption;
123}
124
126{
127 return 0;
128}
129
131{
132 return m_icon;
133}
134
136{
137 return m_iconName;
138}
139
141{
142 return m_active;
143}
144
146{
147 return m_closeable;
148}
149
151{
152 return m_keepAbove;
153}
154
156{
157 return m_keepBelow;
158}
159
161{
162 return m_maximizable;
163}
164
169
171{
172 return m_maximizedHorizontally;
173}
174
176{
177 return m_maximizedVertically;
178}
179
181{
182 return m_minimizable;
183}
184
186{
187 return m_modal;
188}
189
191{
192 return m_movable;
193}
194
196{
197 return m_onAllDesktops;
198}
199
201{
202 return m_resizable;
203}
204
206{
207 return m_shadeable;
208}
209
211{
212 return m_shaded;
213}
214
216{
217 return m_providesContextHelp;
218}
219
221{
222 return 0;
223}
224
226{
227 return m_palette.palette();
228}
229
230QColor PreviewClient::color(ColorGroup group, ColorRole role) const
231{
232 return m_palette.color(group, role);
233}
234
236{
237 Qt::Edges edges;
238 if (m_bordersBottomEdge) {
239 edges |= Qt::BottomEdge;
240 }
241 if (m_bordersLeftEdge) {
242 edges |= Qt::LeftEdge;
243 }
244 if (m_bordersRightEdge) {
245 edges |= Qt::RightEdge;
246 }
247 if (m_bordersTopEdge) {
248 edges |= Qt::TopEdge;
249 }
250 return edges;
251}
252
254{
255 return QString();
256}
257
259{
260 return true;
261}
262
264{
265 return false;
266}
267
269{
270 return m_bordersBottomEdge;
271}
272
274{
275 return m_bordersLeftEdge;
276}
277
279{
280 return m_bordersRightEdge;
281}
282
284{
285 return m_bordersTopEdge;
286}
287
289{
290 if (m_bordersBottomEdge == enabled) {
291 return;
292 }
293 m_bordersBottomEdge = enabled;
294 Q_EMIT bordersBottomEdgeChanged(enabled);
295}
296
298{
299 if (m_bordersLeftEdge == enabled) {
300 return;
301 }
302 m_bordersLeftEdge = enabled;
303 Q_EMIT bordersLeftEdgeChanged(enabled);
304}
305
307{
308 if (m_bordersRightEdge == enabled) {
309 return;
310 }
311 m_bordersRightEdge = enabled;
312 Q_EMIT bordersRightEdgeChanged(enabled);
313}
314
316{
317 if (m_bordersTopEdge == enabled) {
318 return;
319 }
320 m_bordersTopEdge = enabled;
321 Q_EMIT bordersTopEdgeChanged(enabled);
322}
323
324void PreviewClient::requestShowToolTip(const QString &text)
325{
326}
327
331
333{
334 Q_EMIT closeRequested();
335}
336
340
341void PreviewClient::requestToggleMaximization(Qt::MouseButtons buttons)
342{
343 if (buttons.testFlag(Qt::LeftButton)) {
344 const bool set = !isMaximized();
347 } else if (buttons.testFlag(Qt::RightButton)) {
349 } else if (buttons.testFlag(Qt::MiddleButton)) {
351 }
352}
353
358
363
368
370{
372}
373
374void PreviewClient::requestShowApplicationMenu(const QRect &rect, int actionId)
375{
376}
377
379{
380}
381
383{
384 m_onAllDesktops = !m_onAllDesktops;
385 Q_EMIT onAllDesktopsChanged(m_onAllDesktops);
386}
387
392
393#define SETTER(type, name, variable) \
394 void PreviewClient::name(type variable) \
395 { \
396 if (m_##variable == variable) { \
397 return; \
398 } \
399 m_##variable = variable; \
400 Q_EMIT variable##Changed(m_##variable); \
401 }
402
403#define SETTER2(name, variable) SETTER(bool, name, variable)
404
405SETTER(const QString &, setCaption, caption)
406SETTER(const QString &, setIconName, iconName)
407SETTER(int, setWidth, width)
408SETTER(int, setHeight, height)
409
410SETTER2(setActive, active)
411SETTER2(setCloseable, closeable)
412SETTER2(setMaximizable, maximizable)
413SETTER2(setKeepBelow, keepBelow)
414SETTER2(setKeepAbove, keepAbove)
415SETTER2(setMaximizedHorizontally, maximizedHorizontally)
416SETTER2(setMaximizedVertically, maximizedVertically)
417SETTER2(setMinimizable, minimizable)
418SETTER2(setModal, modal)
419SETTER2(setMovable, movable)
420SETTER2(setResizable, resizable)
421SETTER2(setShadeable, shadeable)
422SETTER2(setShaded, shaded)
423SETTER2(setProvidesContextHelp, providesContextHelp)
424
425#undef SETTER2
426#undef SETTER
427
428} // namespace Preview
429} // namespace KDecoration2
430
431#include "moc_previewclient.cpp"
bool isMaximizedHorizontally() const override
void iconNameChanged(const QString &)
void setMaximizedVertically(bool maximized)
bool isMaximizedVertically() const override
bool isApplicationMenuActive() const override
Qt::Edges adjacentScreenEdges() const override
void setMaximizedHorizontally(bool maximized)
void requestShowWindowMenu(const QRect &rect) override
void requestToggleMaximization(Qt::MouseButtons buttons) override
void requestShowToolTip(const QString &text) override
QString windowClass() const override
void showApplicationMenu(int actionId) override
QPalette palette() const override
void paletteChanged(const QPalette &)
PreviewClient(DecoratedClient *client, Decoration *decoration)
void captionChanged(const QString &)
void requestShowApplicationMenu(const QRect &rect, int actionId) override
QColor color(ColorGroup group, ColorRole role) const override
QColor color(KDecoration2::ColorGroup group, KDecoration2::ColorRole role) const
#define SETTER2(name, variable)
#define SETTER(type, name, variable)