KWin
Loading...
Searching...
No Matches
keyboard_layout_switching.h
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 2017 Martin Gräßlin <mgraesslin@kde.org>
6
7 SPDX-License-Identifier: GPL-2.0-or-later
8*/
9#pragma once
10
11#include <KConfigGroup>
12#include <QHash>
13#include <QObject>
14#include <memory>
15
16namespace KWin
17{
18
19class Window;
20class KeyboardLayout;
21class Xkb;
22class VirtualDesktop;
23
24namespace KeyboardLayoutSwitching
25{
26
27class Policy : public QObject
28{
29 Q_OBJECT
30public:
31 ~Policy() override;
32
33 virtual QString name() const = 0;
34
35 static std::unique_ptr<Policy> create(Xkb *xkb, KeyboardLayout *layout, const KConfigGroup &config, const QString &policy);
36
37protected:
38 explicit Policy(Xkb *xkb, KeyboardLayout *layout, const KConfigGroup &config = KConfigGroup());
39 virtual void clearCache() = 0;
40 virtual void layoutChanged(uint index) = 0;
41
42 void setLayout(uint index);
43
44 KConfigGroup m_config;
45 virtual const QString defaultLayoutEntryKey() const;
46 void clearLayouts();
47
48 static const char defaultLayoutEntryKeyPrefix[];
50
51private:
52 KeyboardLayout *m_layout;
53};
54
55class GlobalPolicy : public Policy
56{
57 Q_OBJECT
58public:
59 explicit GlobalPolicy(Xkb *xkb, KeyboardLayout *layout, const KConfigGroup &config);
60 ~GlobalPolicy() override;
61
62 QString name() const override
63 {
64 return QStringLiteral("Global");
65 }
66
67protected:
68 void clearCache() override
69 {
70 }
71 void layoutChanged(uint index) override
72 {
73 }
74
75private:
76 const QString defaultLayoutEntryKey() const override;
77};
78
80{
81 Q_OBJECT
82public:
83 explicit VirtualDesktopPolicy(Xkb *xkb, KeyboardLayout *layout, const KConfigGroup &config);
85
86 QString name() const override
87 {
88 return QStringLiteral("Desktop");
89 }
90
91protected:
92 void clearCache() override;
93 void layoutChanged(uint index) override;
94
95private:
96 void desktopChanged();
97 QHash<VirtualDesktop *, quint32> m_layouts;
98};
99
100class WindowPolicy : public Policy
101{
102 Q_OBJECT
103public:
104 explicit WindowPolicy(Xkb *xkb, KeyboardLayout *layout);
105 ~WindowPolicy() override;
106
107 QString name() const override
108 {
109 return QStringLiteral("Window");
110 }
111
112protected:
113 void clearCache() override;
114 void layoutChanged(uint index) override;
115
116private:
117 QHash<Window *, quint32> m_layouts;
118};
119
121{
122 Q_OBJECT
123public:
124 explicit ApplicationPolicy(Xkb *xkb, KeyboardLayout *layout, const KConfigGroup &config);
125 ~ApplicationPolicy() override;
126
127 QString name() const override
128 {
129 return QStringLiteral("WinClass");
130 }
131
132protected:
133 void clearCache() override;
134 void layoutChanged(uint index) override;
135
136private:
137 void windowActivated(Window *window);
138 QHash<Window *, quint32> m_layouts;
139 QHash<QString, quint32> m_layoutsRestored;
140};
141
142}
143}
ApplicationPolicy(Xkb *xkb, KeyboardLayout *layout, const KConfigGroup &config)
GlobalPolicy(Xkb *xkb, KeyboardLayout *layout, const KConfigGroup &config)
virtual const QString defaultLayoutEntryKey() const
static std::unique_ptr< Policy > create(Xkb *xkb, KeyboardLayout *layout, const KConfigGroup &config, const QString &policy)
Policy(Xkb *xkb, KeyboardLayout *layout, const KConfigGroup &config=KConfigGroup())
virtual void layoutChanged(uint index)=0
virtual QString name() const =0
VirtualDesktopPolicy(Xkb *xkb, KeyboardLayout *layout, const KConfigGroup &config)