File indexing completed on 2026-07-12 16:17:45
0001 /* 0002 SPDX-FileCopyrightText: 2018 Eike Hein <hein@kde.org> 0003 SPDX-FileCopyrightText: 2018 Vlad Zahorodnii <vlad.zahorodnii@kde.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "virtualdesktops.h" 0009 #include "animationsmodel.h" 0010 #include "desktopsmodel.h" 0011 #include "virtualdesktopsdata.h" 0012 #include "virtualdesktopssettings.h" 0013 0014 #include <KAboutApplicationDialog> 0015 #include <KAboutData> 0016 #include <KConfigGroup> 0017 #include <KLocalizedString> 0018 #include <KPluginFactory> 0019 0020 K_PLUGIN_FACTORY_WITH_JSON(VirtualDesktopsFactory, 0021 "kcm_kwin_virtualdesktops.json", 0022 registerPlugin<KWin::VirtualDesktops>(); 0023 registerPlugin<KWin::VirtualDesktopsData>();) 0024 0025 namespace KWin 0026 { 0027 0028 VirtualDesktops::VirtualDesktops(QObject *parent, const QVariantList &args) 0029 : KQuickAddons::ManagedConfigModule(parent, args) 0030 , m_data(new VirtualDesktopsData(this)) 0031 { 0032 KAboutData *about = new KAboutData(QStringLiteral("kcm_kwin_virtualdesktops"), 0033 i18n("Virtual Desktops"), 0034 QStringLiteral("2.0"), QString(), KAboutLicense::GPL); 0035 setAboutData(about); 0036 0037 qmlRegisterAnonymousType<VirtualDesktopsSettings>("org.kde.kwin.kcm.desktop", 0); 0038 0039 setButtons(Apply | Default | Help); 0040 0041 QObject::connect(m_data->desktopsModel(), &KWin::DesktopsModel::userModifiedChanged, 0042 this, &VirtualDesktops::settingsChanged); 0043 connect(m_data->animationsModel(), &AnimationsModel::animationEnabledChanged, 0044 this, &VirtualDesktops::settingsChanged); 0045 connect(m_data->animationsModel(), &AnimationsModel::animationIndexChanged, 0046 this, &VirtualDesktops::settingsChanged); 0047 } 0048 0049 VirtualDesktops::~VirtualDesktops() 0050 { 0051 } 0052 0053 QAbstractItemModel *VirtualDesktops::desktopsModel() const 0054 { 0055 return m_data->desktopsModel(); 0056 } 0057 0058 QAbstractItemModel *VirtualDesktops::animationsModel() const 0059 { 0060 return m_data->animationsModel(); 0061 } 0062 0063 VirtualDesktopsSettings *VirtualDesktops::virtualDesktopsSettings() const 0064 { 0065 return m_data->settings(); 0066 } 0067 0068 void VirtualDesktops::load() 0069 { 0070 ManagedConfigModule::load(); 0071 0072 m_data->desktopsModel()->load(); 0073 m_data->animationsModel()->load(); 0074 } 0075 0076 void VirtualDesktops::save() 0077 { 0078 ManagedConfigModule::save(); 0079 0080 m_data->desktopsModel()->syncWithServer(); 0081 m_data->animationsModel()->save(); 0082 0083 QDBusMessage message = QDBusMessage::createSignal(QStringLiteral("/KWin"), 0084 QStringLiteral("org.kde.KWin"), QStringLiteral("reloadConfig")); 0085 QDBusConnection::sessionBus().send(message); 0086 } 0087 0088 void VirtualDesktops::defaults() 0089 { 0090 ManagedConfigModule::defaults(); 0091 0092 m_data->desktopsModel()->defaults(); 0093 m_data->animationsModel()->defaults(); 0094 } 0095 0096 bool VirtualDesktops::isDefaults() const 0097 { 0098 return m_data->isDefaults(); 0099 } 0100 0101 void VirtualDesktops::configureAnimation() 0102 { 0103 const QModelIndex index = m_data->animationsModel()->index(m_data->animationsModel()->animationIndex(), 0); 0104 if (!index.isValid()) { 0105 return; 0106 } 0107 0108 m_data->animationsModel()->requestConfigure(index, nullptr); 0109 } 0110 0111 void VirtualDesktops::showAboutAnimation() 0112 { 0113 const QModelIndex index = m_data->animationsModel()->index(m_data->animationsModel()->animationIndex(), 0); 0114 if (!index.isValid()) { 0115 return; 0116 } 0117 0118 const QString name = index.data(AnimationsModel::NameRole).toString(); 0119 const QString comment = index.data(AnimationsModel::DescriptionRole).toString(); 0120 const QString author = index.data(AnimationsModel::AuthorNameRole).toString(); 0121 const QString email = index.data(AnimationsModel::AuthorEmailRole).toString(); 0122 const QString website = index.data(AnimationsModel::WebsiteRole).toString(); 0123 const QString version = index.data(AnimationsModel::VersionRole).toString(); 0124 const QString license = index.data(AnimationsModel::LicenseRole).toString(); 0125 const QString icon = index.data(AnimationsModel::IconNameRole).toString(); 0126 0127 const KAboutLicense::LicenseKey licenseType = KAboutLicense::byKeyword(license).key(); 0128 0129 KAboutData aboutData( 0130 name, // Plugin name 0131 name, // Display name 0132 version, // Version 0133 comment, // Short description 0134 licenseType, // License 0135 QString(), // Copyright statement 0136 QString(), // Other text 0137 website.toLatin1() // Home page 0138 ); 0139 aboutData.setProgramLogo(icon); 0140 0141 const QStringList authors = author.split(','); 0142 const QStringList emails = email.split(','); 0143 0144 if (authors.count() == emails.count()) { 0145 int i = 0; 0146 for (const QString &author : authors) { 0147 if (!author.isEmpty()) { 0148 aboutData.addAuthor(i18n(author.toUtf8()), QString(), emails[i]); 0149 } 0150 i++; 0151 } 0152 } 0153 0154 QPointer<KAboutApplicationDialog> aboutPlugin = new KAboutApplicationDialog(aboutData); 0155 aboutPlugin->exec(); 0156 0157 delete aboutPlugin; 0158 } 0159 0160 bool VirtualDesktops::isSaveNeeded() const 0161 { 0162 return m_data->animationsModel()->needsSave() || m_data->desktopsModel()->needsSave(); 0163 } 0164 0165 } 0166 0167 #include "moc_virtualdesktops.cpp" 0168 #include "virtualdesktops.moc"