1 /*
2     KWin - the KDE window manager
3     This file is part of the KDE project.
4 
5     SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
6 
7     SPDX-License-Identifier: GPL-2.0-or-later
8 */
9 #ifndef KWIN_DECORATION_BRIDGE_H
10 #define KWIN_DECORATION_BRIDGE_H
11 
12 #include <kwinglobals.h>
13 
14 #include <KDecoration2/Private/DecorationBridge>
15 
16 #include <KSharedConfig>
17 
18 #include <QObject>
19 #include <QSharedPointer>
20 
21 class KPluginFactory;
22 
23 namespace KDecoration2
24 {
25 class DecorationSettings;
26 }
27 
28 namespace KWin
29 {
30 
31 class AbstractClient;
32 
33 namespace Decoration
34 {
35 
36 class KWIN_EXPORT DecorationBridge : public KDecoration2::DecorationBridge
37 {
38     Q_OBJECT
39 public:
40     ~DecorationBridge() override;
41 
42     static bool hasPlugin();
43 
44     void init();
45     KDecoration2::Decoration *createDecoration(AbstractClient *client);
46 
47     std::unique_ptr<KDecoration2::DecoratedClientPrivate> createClient(KDecoration2::DecoratedClient *client, KDecoration2::Decoration *decoration) override;
48     std::unique_ptr<KDecoration2::DecorationSettingsPrivate> settings(KDecoration2::DecorationSettings *parent) override;
49 
needsBlur()50     bool needsBlur() const {
51         return m_blur;
52     }
recommendedBorderSize()53     QString recommendedBorderSize() const {
54         return m_recommendedBorderSize;
55     }
56 
showToolTips()57     bool showToolTips() const {
58         return m_showToolTips;
59     }
60 
61     void reconfigure();
62 
settings()63     const QSharedPointer<KDecoration2::DecorationSettings> &settings() const {
64         return m_settings;
65     }
66 
67     QString supportInformation() const;
68 
69 Q_SIGNALS:
70     void metaDataLoaded();
71 
72 private:
73     QString readPlugin();
74     void loadMetaData(const QJsonObject &object);
75     void findTheme(const QVariantMap &map);
76     void initPlugin();
77     QString readTheme() const;
78     void readDecorationOptions();
79     KPluginFactory *m_factory;
80     KSharedConfig::Ptr m_lnfConfig;
81     bool m_blur;
82     bool m_showToolTips;
83     QString m_recommendedBorderSize;
84     QString m_plugin;
85     QString m_defaultTheme;
86     QString m_theme;
87     QSharedPointer<KDecoration2::DecorationSettings> m_settings;
88     bool m_noPlugin;
89     KWIN_SINGLETON(DecorationBridge)
90 };
91 } // Decoration
92 } // KWin
93 
94 #endif
95