KWin
Loading...
Searching...
No Matches
desktopbackgrounditem.cpp
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2021 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
8#include "core/output.h"
9#include "window.h"
10#if KWIN_BUILD_ACTIVITIES
11#include "activities.h"
12#endif
13#include "core/outputbackend.h"
14#include "main.h"
15#include "scripting_logging.h"
16#include "virtualdesktops.h"
17#include "workspace.h"
18
19namespace KWin
20{
21
26
28{
29 WindowThumbnailItem::componentComplete();
30 updateWindow();
31}
32
34{
35 return m_output ? m_output->name() : QString();
36}
37
38void DesktopBackgroundItem::setOutputName(const QString &name)
39{
40 setOutput(kwinApp()->outputBackend()->findOutput(name));
41}
42
44{
45 return m_output;
46}
47
49{
50 if (m_output != output) {
51 m_output = output;
52 updateWindow();
53 Q_EMIT outputChanged();
54 }
55}
56
58{
59 return m_desktop;
60}
61
63{
64 if (m_desktop != desktop) {
65 m_desktop = desktop;
66 updateWindow();
67 Q_EMIT desktopChanged();
68 }
69}
70
72{
73 return m_activity;
74}
75
76void DesktopBackgroundItem::setActivity(const QString &activity)
77{
78 if (m_activity != activity) {
79 m_activity = activity;
80 updateWindow();
81 Q_EMIT activityChanged();
82 }
83}
84
85void DesktopBackgroundItem::updateWindow()
86{
87 if (!isComponentComplete()) {
88 return;
89 }
90
91 if (Q_UNLIKELY(!m_output)) {
92 qCWarning(KWIN_SCRIPTING) << "DesktopBackgroundItem.output is required";
93 return;
94 }
95
96 VirtualDesktop *desktop = m_desktop;
97 if (!desktop) {
98 desktop = VirtualDesktopManager::self()->currentDesktop();
99 }
100
101 QString activity = m_activity;
102 if (activity.isEmpty()) {
103#if KWIN_BUILD_ACTIVITIES
104 activity = Workspace::self()->activities()->current();
105#endif
106 }
107
108 Window *clientCandidate = nullptr;
109
110 const auto clients = workspace()->windows();
111 for (Window *client : clients) {
113 // In the unlikely event there are multiple desktop windows (e.g. conky's floating panel is of type "desktop")
114 // choose the one which matches the ouptut size, if possible.
115 if (!clientCandidate || client->size() == m_output->geometry().size()) {
116 clientCandidate = client;
117 }
118 }
119 }
120
121 setClient(clientCandidate);
122}
123
124} // namespace KWin
125
126#include "moc_desktopbackgrounditem.cpp"
void setOutputName(const QString &name)
void setActivity(const QString &activity)
DesktopBackgroundItem(QQuickItem *parent=nullptr)
void setDesktop(VirtualDesktop *desktop)
QRect geometry
Definition output.h:134
QString name
Definition output.h:136
bool isOnActivity(const QString &activity) const
Definition window.h:2042
QSizeF size
Definition window.h:84
bool isDesktop() const
Definition window.h:1922
bool isOnDesktop(VirtualDesktop *desktop) const
Definition window.cpp:843
bool isOnOutput(Output *output) const
Definition window.cpp:254
static Workspace * self()
Definition workspace.h:91
const QList< Window * > windows() const
Definition workspace.h:248
Workspace * workspace()
Definition workspace.h:830