KWin
Loading...
Searching...
No Matches
virtualdesktops.cpp
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2018 Eike Hein <hein@kde.org>
3 SPDX-FileCopyrightText: 2018 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
4
5 SPDX-License-Identifier: GPL-2.0-or-later
6*/
7
8#include "virtualdesktops.h"
9#include "animationsmodel.h"
10#include "desktopsmodel.h"
11#include "virtualdesktopsdata.h"
12#include "virtualdesktopssettings.h"
13
14#include <KAboutApplicationDialog>
15#include <KAboutData>
16#include <KConfigGroup>
17#include <KLocalizedString>
18#include <KPluginFactory>
19#include <QDBusConnection>
20#include <QDBusMessage>
21
22K_PLUGIN_FACTORY_WITH_JSON(VirtualDesktopsFactory,
23 "kcm_kwin_virtualdesktops.json",
24 registerPlugin<KWin::VirtualDesktops>();
25 registerPlugin<KWin::VirtualDesktopsData>();)
26
27namespace KWin
28{
29
30VirtualDesktops::VirtualDesktops(QObject *parent, const KPluginMetaData &metaData)
31 : KQuickManagedConfigModule(parent, metaData)
32 , m_data(new VirtualDesktopsData(this))
33{
34 qmlRegisterAnonymousType<VirtualDesktopsSettings>("org.kde.kwin.kcm.desktop", 0);
35
36 setButtons(Apply | Default | Help);
37
38 QObject::connect(m_data->desktopsModel(), &KWin::DesktopsModel::userModifiedChanged,
39 this, &VirtualDesktops::settingsChanged);
40 connect(m_data->animationsModel(), &AnimationsModel::animationEnabledChanged,
41 this, &VirtualDesktops::settingsChanged);
42 connect(m_data->animationsModel(), &AnimationsModel::animationIndexChanged,
43 this, &VirtualDesktops::settingsChanged);
44}
45
46VirtualDesktops::~VirtualDesktops()
47{
48}
49
50QAbstractItemModel *VirtualDesktops::desktopsModel() const
51{
52 return m_data->desktopsModel();
53}
54
55QAbstractItemModel *VirtualDesktops::animationsModel() const
56{
57 return m_data->animationsModel();
58}
59
60VirtualDesktopsSettings *VirtualDesktops::virtualDesktopsSettings() const
61{
62 return m_data->settings();
63}
64
65void VirtualDesktops::load()
66{
67 KQuickManagedConfigModule::load();
68
69 m_data->desktopsModel()->load();
70 m_data->animationsModel()->load();
71}
72
73void VirtualDesktops::save()
74{
75 KQuickManagedConfigModule::save();
76
77 m_data->desktopsModel()->syncWithServer();
78 m_data->animationsModel()->save();
79
80 QDBusMessage message = QDBusMessage::createSignal(QStringLiteral("/KWin"),
81 QStringLiteral("org.kde.KWin"), QStringLiteral("reloadConfig"));
82 QDBusConnection::sessionBus().send(message);
83}
84
85void VirtualDesktops::defaults()
86{
87 KQuickManagedConfigModule::defaults();
88
89 m_data->desktopsModel()->defaults();
90 m_data->animationsModel()->defaults();
91}
92
93bool VirtualDesktops::isDefaults() const
94{
95 return m_data->isDefaults();
96}
97
98void VirtualDesktops::configureAnimation()
99{
100 const QModelIndex index = m_data->animationsModel()->index(m_data->animationsModel()->animationIndex(), 0);
101 if (!index.isValid()) {
102 return;
103 }
104
105 m_data->animationsModel()->requestConfigure(index, nullptr);
106}
107
108void VirtualDesktops::showAboutAnimation()
109{
110 const QModelIndex index = m_data->animationsModel()->index(m_data->animationsModel()->animationIndex(), 0);
111 if (!index.isValid()) {
112 return;
113 }
114
115 const QString name = index.data(AnimationsModel::NameRole).toString();
116 const QString comment = index.data(AnimationsModel::DescriptionRole).toString();
117 const QString author = index.data(AnimationsModel::AuthorNameRole).toString();
118 const QString email = index.data(AnimationsModel::AuthorEmailRole).toString();
119 const QString website = index.data(AnimationsModel::WebsiteRole).toString();
120 const QString version = index.data(AnimationsModel::VersionRole).toString();
121 const QString license = index.data(AnimationsModel::LicenseRole).toString();
122 const QString icon = index.data(AnimationsModel::IconNameRole).toString();
123
124 const KAboutLicense::LicenseKey licenseType = KAboutLicense::byKeyword(license).key();
125
126 KAboutData aboutData(
127 name, // Plugin name
128 name, // Display name
129 version, // Version
130 comment, // Short description
131 licenseType, // License
132 QString(), // Copyright statement
133 QString(), // Other text
134 website.toLatin1() // Home page
135 );
136 aboutData.setProgramLogo(icon);
137
138 const QStringList authors = author.split(',');
139 const QStringList emails = email.split(',');
140
141 if (authors.count() == emails.count()) {
142 int i = 0;
143 for (const QString &author : authors) {
144 if (!author.isEmpty()) {
145 aboutData.addAuthor(i18n(author.toUtf8()), QString(), emails[i]);
146 }
147 i++;
148 }
149 }
150
151 QPointer<KAboutApplicationDialog> aboutPlugin = new KAboutApplicationDialog(aboutData);
152 aboutPlugin->exec();
153
154 delete aboutPlugin;
155}
156
157bool VirtualDesktops::isSaveNeeded() const
158{
159 return m_data->animationsModel()->needsSave() || m_data->desktopsModel()->needsSave();
160}
161
162}
163
164#include "moc_virtualdesktops.cpp"
165#include "virtualdesktops.moc"
void userModifiedChanged() const
K_PLUGIN_FACTORY_WITH_JSON(VirtualDesktopsFactory, "kcm_kwin_virtualdesktops.json", registerPlugin< KWin::VirtualDesktops >();registerPlugin< KWin::VirtualDesktopsData >();) namespace KWin
constexpr int version