1 /*
2     KWin - the KDE window manager
3     This file is part of the KDE project.
4 
5     SPDX-FileCopyrightText: 2007 Christian Nitschkowski <christian.nitschkowski@kdemail.net>
6 
7     SPDX-License-Identifier: GPL-2.0-or-later
8 */
9 
10 #include "lookingglass_config.h"
11 
12 // KConfigSkeleton
13 #include "lookingglassconfig.h"
14 #include <config-kwin.h>
15 #include <kwineffects_interface.h>
16 
17 #include <QAction>
18 
19 #include <KGlobalAccel>
20 #include <KLocalizedString>
21 #include <kconfiggroup.h>
22 #include <KActionCollection>
23 #include <KAboutData>
24 #include <KPluginFactory>
25 
26 #include <QDebug>
27 #include <QWidget>
28 #include <QVBoxLayout>
29 
30 K_PLUGIN_FACTORY_WITH_JSON(LookingGlassEffectConfigFactory,
31                            "lookingglass_config.json",
32                            registerPlugin<KWin::LookingGlassEffectConfig>();)
33 
34 namespace KWin
35 {
36 
LookingGlassEffectConfigForm(QWidget * parent)37 LookingGlassEffectConfigForm::LookingGlassEffectConfigForm(QWidget* parent) : QWidget(parent)
38 {
39     setupUi(this);
40 }
41 
LookingGlassEffectConfig(QWidget * parent,const QVariantList & args)42 LookingGlassEffectConfig::LookingGlassEffectConfig(QWidget* parent, const QVariantList& args) :
43     KCModule(parent, args)
44 {
45     m_ui = new LookingGlassEffectConfigForm(this);
46 
47     QVBoxLayout* layout = new QVBoxLayout(this);
48 
49     layout->addWidget(m_ui);
50 
51     LookingGlassConfig::instance(KWIN_CONFIG);
52     addConfig(LookingGlassConfig::self(), m_ui);
53     connect(m_ui->editor, &KShortcutsEditor::keyChange, this, &LookingGlassEffectConfig::markAsChanged);
54 
55     // Shortcut config. The shortcut belongs to the component "kwin"!
56     m_actionCollection = new KActionCollection(this, QStringLiteral("kwin"));
57 
58     m_actionCollection->setComponentDisplayName(i18n("KWin"));
59     m_actionCollection->setConfigGroup(QStringLiteral("LookingGlass"));
60     m_actionCollection->setConfigGlobal(true);
61 
62     QAction* a;
63     a = m_actionCollection->addAction(KStandardAction::ZoomIn);
64     a->setProperty("isConfigurationAction", true);
65     KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Equal);
66     KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Equal);
67 
68     a = m_actionCollection->addAction(KStandardAction::ZoomOut);
69     a->setProperty("isConfigurationAction", true);
70     KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Minus);
71     KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Minus);
72 
73     a = m_actionCollection->addAction(KStandardAction::ActualSize);
74     a->setProperty("isConfigurationAction", true);
75     KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_0);
76     KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_0);
77 
78     m_ui->editor->addCollection(m_actionCollection);
79 }
80 
~LookingGlassEffectConfig()81 LookingGlassEffectConfig::~LookingGlassEffectConfig()
82 {
83     // Undo (only) unsaved changes to global key shortcuts
84     m_ui->editor->undo();
85 }
86 
save()87 void LookingGlassEffectConfig::save()
88 {
89     qDebug() << "Saving config of LookingGlass" ;
90     KCModule::save();
91 
92     m_ui->editor->save();   // undo() will restore to this state from now on
93 
94     OrgKdeKwinEffectsInterface interface(QStringLiteral("org.kde.KWin"),
95                                          QStringLiteral("/Effects"),
96                                          QDBusConnection::sessionBus());
97     interface.reconfigureEffect(QStringLiteral("lookingglass"));
98 }
99 
defaults()100 void LookingGlassEffectConfig::defaults()
101 {
102     m_ui->editor->allDefault();
103     KCModule::defaults();
104 }
105 
106 } // namespace
107 
108 #include "lookingglass_config.moc"
109