KWin
Loading...
Searching...
No Matches
scriptedquicksceneeffect.cpp
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2023 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
8#include "main.h"
9
10#include <KConfigGroup>
11#include <KConfigLoader>
12
13#include <QFile>
14
15namespace KWin
16{
17
19{
20 m_visibleTimer.setSingleShot(true);
21 connect(&m_visibleTimer, &QTimer::timeout, this, [this]() {
22 setRunning(false);
23 });
24}
25
29
30void ScriptedQuickSceneEffect::reconfigure(ReconfigureFlags flags)
31{
32 m_configLoader->load();
33 Q_EMIT m_configLoader->configChanged();
34}
35
37{
38 return m_requestedEffectChainPosition;
39}
40
41void ScriptedQuickSceneEffect::setMetaData(const KPluginMetaData &metaData)
42{
43 m_requestedEffectChainPosition = metaData.value(QStringLiteral("X-KDE-Ordering"), 50);
44
45 KConfigGroup cg = kwinApp()->config()->group(QStringLiteral("Effect-%1").arg(metaData.pluginId()));
46 const QString configFilePath = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QLatin1String("kwin/effects/") + metaData.pluginId() + QLatin1String("/contents/config/main.xml"));
47 if (configFilePath.isNull()) {
48 m_configLoader = new KConfigLoader(cg, nullptr, this);
49 } else {
50 QFile xmlFile(configFilePath);
51 m_configLoader = new KConfigLoader(cg, &xmlFile, this);
52 m_configLoader->load();
53 }
54
55 m_configuration = new KConfigPropertyMap(m_configLoader, this);
56 connect(m_configLoader, &KConfigLoader::configChanged, this, &ScriptedQuickSceneEffect::configurationChanged);
57}
58
60{
61 return m_isVisible;
62}
63
65{
66 if (m_isVisible == visible) {
67 return;
68 }
69 m_isVisible = visible;
70
71 if (m_isVisible) {
72 m_visibleTimer.stop();
73 setRunning(true);
74 } else {
75 // Delay setRunning(false) to avoid destroying views while still executing JS code.
76 m_visibleTimer.start();
77 }
78
79 Q_EMIT visibleChanged();
80}
81
82KConfigPropertyMap *ScriptedQuickSceneEffect::configuration() const
83{
84 return m_configuration;
85}
86
87QQmlListProperty<QObject> ScriptedQuickSceneEffect::data()
88{
89 return QQmlListProperty<QObject>(this, nullptr,
92 data_at,
94}
95
96void ScriptedQuickSceneEffect::data_append(QQmlListProperty<QObject> *objects, QObject *object)
97{
98 if (!object) {
99 return;
100 }
101
102 ScriptedQuickSceneEffect *effect = static_cast<ScriptedQuickSceneEffect *>(objects->object);
103 if (!effect->m_children.contains(object)) {
104 object->setParent(effect);
105 effect->m_children.append(object);
106 }
107}
108
109qsizetype ScriptedQuickSceneEffect::data_count(QQmlListProperty<QObject> *objects)
110{
111 ScriptedQuickSceneEffect *effect = static_cast<ScriptedQuickSceneEffect *>(objects->object);
112 return effect->m_children.count();
113}
114
115QObject *ScriptedQuickSceneEffect::data_at(QQmlListProperty<QObject> *objects, qsizetype index)
116{
117 ScriptedQuickSceneEffect *effect = static_cast<ScriptedQuickSceneEffect *>(objects->object);
118 return effect->m_children.value(index);
119}
120
121void ScriptedQuickSceneEffect::data_clear(QQmlListProperty<QObject> *objects)
122{
123 ScriptedQuickSceneEffect *effect = static_cast<ScriptedQuickSceneEffect *>(objects->object);
124 while (!effect->m_children.isEmpty()) {
125 QObject *child = effect->m_children.takeLast();
126 child->setParent(nullptr);
127 }
128}
129
130} // namespace KWin
131
132#include "moc_scriptedquicksceneeffect.cpp"
void setRunning(bool running)
static qsizetype data_count(QQmlListProperty< QObject > *objects)
void setMetaData(const KPluginMetaData &metaData)
static void data_append(QQmlListProperty< QObject > *objects, QObject *object)
void reconfigure(ReconfigureFlags flags) override
static QObject * data_at(QQmlListProperty< QObject > *objects, qsizetype index)
static void data_clear(QQmlListProperty< QObject > *objects)