KCM KWin VirtualDesktop add KCModuleData to show default indicator at module level

This commit is contained in:
Cyril Rossi 2021-03-17 18:36:38 +01:00 committed by Benjamin Port
parent 16ae008104
commit 2870fb7484
5 changed files with 118 additions and 25 deletions

View file

@ -8,6 +8,7 @@ set(kcm_kwin_virtualdesktops_PART_SRCS
animationsmodel.cpp
desktopsmodel.cpp
virtualdesktops.cpp
virtualdesktopsdata.cpp
)
kconfig_add_kcfg_files(kcm_kwin_virtualdesktops_PART_SRCS virtualdesktopssettings.kcfgc GENERATE_MOC)

View file

@ -9,6 +9,7 @@
#include "animationsmodel.h"
#include "desktopsmodel.h"
#include "virtualdesktopssettings.h"
#include "virtualdesktopsdata.h"
#include <KAboutApplicationDialog>
#include <KAboutData>
@ -16,16 +17,17 @@
#include <KLocalizedString>
#include <KPluginFactory>
K_PLUGIN_FACTORY_WITH_JSON(VirtualDesktopsFactory, "kcm_kwin_virtualdesktops.json", registerPlugin<KWin::VirtualDesktops>();)
K_PLUGIN_FACTORY_WITH_JSON(VirtualDesktopsFactory,
"kcm_kwin_virtualdesktops.json",
registerPlugin<KWin::VirtualDesktops>();
registerPlugin<KWin::VirtualDesktopsData>();)
namespace KWin
{
VirtualDesktops::VirtualDesktops(QObject *parent, const QVariantList &args)
: KQuickAddons::ManagedConfigModule(parent, args)
, m_settings(new VirtualDesktopsSettings(this))
, m_desktopsModel(new KWin::DesktopsModel(this))
, m_animationsModel(new AnimationsModel(this))
, m_data(new VirtualDesktopsData(this))
{
KAboutData *about = new KAboutData(QStringLiteral("kcm_kwin_virtualdesktops"),
i18n("Virtual Desktops"),
@ -36,11 +38,11 @@ VirtualDesktops::VirtualDesktops(QObject *parent, const QVariantList &args)
setButtons(Apply | Default);
QObject::connect(m_desktopsModel, &KWin::DesktopsModel::userModifiedChanged,
QObject::connect(m_data->desktopsModel(), &KWin::DesktopsModel::userModifiedChanged,
this, &VirtualDesktops::settingsChanged);
connect(m_animationsModel, &AnimationsModel::animationEnabledChanged,
connect(m_data->animationsModel(), &AnimationsModel::animationEnabledChanged,
this, &VirtualDesktops::settingsChanged);
connect(m_animationsModel, &AnimationsModel::animationIndexChanged,
connect(m_data->animationsModel(), &AnimationsModel::animationIndexChanged,
this, &VirtualDesktops::settingsChanged);
}
@ -50,33 +52,33 @@ VirtualDesktops::~VirtualDesktops()
QAbstractItemModel *VirtualDesktops::desktopsModel() const
{
return m_desktopsModel;
return m_data->desktopsModel();
}
QAbstractItemModel *VirtualDesktops::animationsModel() const
{
return m_animationsModel;
return m_data->animationsModel();
}
VirtualDesktopsSettings *VirtualDesktops::virtualDesktopsSettings() const
{
return m_settings;
return m_data->settings();
}
void VirtualDesktops::load()
{
ManagedConfigModule::load();
m_desktopsModel->load();
m_animationsModel->load();
m_data->desktopsModel()->load();
m_data->animationsModel()->load();
}
void VirtualDesktops::save()
{
ManagedConfigModule::save();
m_desktopsModel->syncWithServer();
m_animationsModel->save();
m_data->desktopsModel()->syncWithServer();
m_data->animationsModel()->save();
QDBusMessage message = QDBusMessage::createSignal(QStringLiteral("/KWin"),
QStringLiteral("org.kde.KWin"), QStringLiteral("reloadConfig"));
@ -87,28 +89,28 @@ void VirtualDesktops::defaults()
{
ManagedConfigModule::defaults();
m_desktopsModel->defaults();
m_animationsModel->defaults();
m_data->desktopsModel()->defaults();
m_data->animationsModel()->defaults();
}
bool VirtualDesktops::isDefaults() const
{
return m_animationsModel->isDefaults() && m_desktopsModel->isDefaults();
return m_data->isDefaults();
}
void VirtualDesktops::configureAnimation()
{
const QModelIndex index = m_animationsModel->index(m_animationsModel->animationIndex(), 0);
const QModelIndex index = m_data->animationsModel()->index(m_data->animationsModel()->animationIndex(), 0);
if (!index.isValid()) {
return;
}
m_animationsModel->requestConfigure(index, nullptr);
m_data->animationsModel()->requestConfigure(index, nullptr);
}
void VirtualDesktops::showAboutAnimation()
{
const QModelIndex index = m_animationsModel->index(m_animationsModel->animationIndex(), 0);
const QModelIndex index = m_data->animationsModel()->index(m_data->animationsModel()->animationIndex(), 0);
if (!index.isValid()) {
return;
}
@ -157,7 +159,7 @@ void VirtualDesktops::showAboutAnimation()
bool VirtualDesktops::isSaveNeeded() const
{
return m_animationsModel->needsSave() || m_desktopsModel->needsSave();
return m_data->animationsModel()->needsSave() || m_data->desktopsModel()->needsSave();
}
}

View file

@ -15,7 +15,7 @@ class VirtualDesktopsSettings;
namespace KWin
{
class VirtualDesktopsData;
class AnimationsModel;
class DesktopsModel;
@ -49,9 +49,7 @@ public Q_SLOTS:
void showAboutAnimation();
private:
VirtualDesktopsSettings *m_settings;
DesktopsModel *m_desktopsModel;
AnimationsModel *m_animationsModel;
VirtualDesktopsData *m_data;
};
}

View file

@ -0,0 +1,52 @@
/*
SPDX-FileCopyrightText: 2021 Cyril Rossi <cyril.rossi@enioka.com>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "virtualdesktopsdata.h"
#include "desktopsmodel.h"
#include "animationsmodel.h"
#include "virtualdesktopssettings.h"
namespace KWin
{
VirtualDesktopsData::VirtualDesktopsData(QObject *parent, const QVariantList &args)
: KCModuleData(parent, args)
, m_settings(new VirtualDesktopsSettings(this))
, m_desktopsModel(new DesktopsModel(this))
, m_animationsModel(new AnimationsModel(this))
{
// Default behavior of KCModuleData is to emit loaded signal after being initialized.
// To handle asynchronous load of EffectsModel we disable default behavior and
// emit loaded signal when EffectsModel is actually loaded.
disconnect(this, &KCModuleData::aboutToLoad, nullptr, nullptr);
connect(m_animationsModel, &EffectsModel::loaded, this, &KCModuleData::loaded);
m_desktopsModel->load();
m_animationsModel->load();
}
bool VirtualDesktopsData::isDefaults() const
{
return m_animationsModel->isDefaults() && m_desktopsModel->isDefaults() && m_settings->isDefaults();
}
VirtualDesktopsSettings *VirtualDesktopsData::settings() const
{
return m_settings;
}
DesktopsModel *VirtualDesktopsData::desktopsModel() const
{
return m_desktopsModel;
}
AnimationsModel *VirtualDesktopsData::animationsModel() const
{
return m_animationsModel;
}
}

View file

@ -0,0 +1,40 @@
/*
SPDX-FileCopyrightText: 2021 Cyril Rossi <cyril.rossi@enioka.com>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#pragma once
#include <QObject>
#include <KCModuleData>
class VirtualDesktopsSettings;
namespace KWin
{
class AnimationsModel;
class DesktopsModel;
class VirtualDesktopsData : public KCModuleData
{
Q_OBJECT
public:
explicit VirtualDesktopsData(QObject *parent = nullptr, const QVariantList &args = QVariantList());
bool isDefaults() const override;
VirtualDesktopsSettings *settings() const;
DesktopsModel *desktopsModel() const;
AnimationsModel *animationsModel() const;
private:
VirtualDesktopsSettings *m_settings;
DesktopsModel *m_desktopsModel;
AnimationsModel *m_animationsModel;
};
}