KWin
Loading...
Searching...
No Matches
outline.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: 2011 Arthur Arlt <a.arlt@stud.uni-heidelberg.de>
6 SPDX-FileCopyrightText: 2013 Martin Gräßlin <mgraesslin@kde.org>
7
8 SPDX-License-Identifier: GPL-2.0-or-later
9*/
10// own
11#include "outline.h"
12// KWin
13#include "compositor.h"
14#include "main.h"
15#include "scripting/scripting.h"
16#include "utils/common.h"
17// Frameworks
18#include <KConfigGroup>
19// Qt
20#include <QDebug>
21#include <QQmlComponent>
22#include <QQmlContext>
23#include <QQmlEngine>
24#include <QQuickWindow>
25#include <QStandardPaths>
26
27namespace KWin
28{
29
31 : m_active(false)
32{
33 connect(Compositor::self(), &Compositor::compositingToggled, this, &Outline::compositingChanged);
34}
35
36Outline::~Outline() = default;
37
39{
40 if (!m_visual) {
41 createHelper();
42 }
43 if (!m_visual) {
44 // something went wrong
45 return;
46 }
47 m_visual->show();
48 m_active = true;
49 Q_EMIT activeChanged();
50}
51
53{
54 if (!m_active) {
55 return;
56 }
57 m_active = false;
58 Q_EMIT activeChanged();
59 if (!m_visual) {
60 return;
61 }
62 m_visual->hide();
63}
64
65void Outline::show(const QRect &outlineGeometry)
66{
67 show(outlineGeometry, QRect());
68}
69
70void Outline::show(const QRect &outlineGeometry, const QRect &visualParentGeometry)
71{
72 setGeometry(outlineGeometry);
74 show();
75}
76
77void Outline::setGeometry(const QRect &outlineGeometry)
78{
79 if (m_outlineGeometry == outlineGeometry) {
80 return;
81 }
82 m_outlineGeometry = outlineGeometry;
83 Q_EMIT geometryChanged();
85}
86
87void Outline::setVisualParentGeometry(const QRect &visualParentGeometry)
88{
89 if (m_visualParentGeometry == visualParentGeometry) {
90 return;
91 }
92 m_visualParentGeometry = visualParentGeometry;
95}
96
98{
99 return m_outlineGeometry | m_visualParentGeometry;
100}
101
102void Outline::createHelper()
103{
104 if (m_visual) {
105 return;
106 }
107 m_visual = kwinApp()->createOutline(this);
108}
109
110void Outline::compositingChanged()
111{
112 m_visual.reset();
113 if (m_active) {
114 show();
115 }
116}
117
118const QRect &Outline::geometry() const
119{
120 return m_outlineGeometry;
121}
122
124{
125 return m_visualParentGeometry;
126}
127
129{
130 return m_active;
131}
132
134 : m_outline(outline)
135{
136}
137
141
143 : OutlineVisual(outline)
144 , m_qmlContext()
145 , m_qmlComponent()
146 , m_mainItem()
147{
148}
149
153
155{
156 if (QQuickWindow *w = qobject_cast<QQuickWindow *>(m_mainItem.get())) {
157 w->hide();
158 w->destroy();
159 }
160}
161
163{
164 if (!m_qmlContext) {
165 m_qmlContext = std::make_unique<QQmlContext>(Scripting::self()->qmlEngine());
166 m_qmlContext->setContextProperty(QStringLiteral("outline"), m_outline);
167 }
168 if (!m_qmlComponent) {
169 m_qmlComponent = std::make_unique<QQmlComponent>(Scripting::self()->qmlEngine());
170 const QString fileName = QStandardPaths::locate(QStandardPaths::GenericDataLocation,
171 kwinApp()->config()->group(QStringLiteral("Outline")).readEntry("QmlPath", QStringLiteral("kwin/outline/plasma/outline.qml")));
172 if (fileName.isEmpty()) {
173 qCDebug(KWIN_CORE) << "Could not locate outline.qml";
174 return;
175 }
176 m_qmlComponent->loadUrl(QUrl::fromLocalFile(fileName));
177 if (m_qmlComponent->isError()) {
178 qCDebug(KWIN_CORE) << "Component failed to load: " << m_qmlComponent->errors();
179 } else {
180 m_mainItem.reset(m_qmlComponent->create(m_qmlContext.get()));
181 }
182 if (auto w = qobject_cast<QQuickWindow *>(m_mainItem.get())) {
183 w->setProperty("__kwin_outline", true);
184 }
185 }
186}
187
188} // namespace
189
190#include "moc_outline.cpp"
CompositedOutlineVisual(Outline *outline)
Definition outline.cpp:142
void compositingToggled(bool active)
static Compositor * self()
This class is used to show the outline of a given geometry.
Definition outline.h:38
void hide()
Definition outline.cpp:52
void unifiedGeometryChanged()
void setVisualParentGeometry(const QRect &visualParentGeometry)
Definition outline.cpp:87
QRect geometry
Definition outline.h:40
QRect unifiedGeometry
Definition outline.h:42
void visualParentGeometryChanged()
~Outline() override
void show()
Definition outline.cpp:38
QRect visualParentGeometry
Definition outline.h:41
void setGeometry(const QRect &outlineGeometry)
Definition outline.cpp:77
void geometryChanged()
bool isActive() const
Definition outline.cpp:128
void activeChanged()
virtual ~OutlineVisual()
Definition outline.cpp:138
virtual void hide()=0
OutlineVisual(Outline *outline)
Definition outline.cpp:133
Outline *const m_outline
Definition outline.h:130
static Scripting * self()
Definition scripting.h:393