1 /*
2     SPDX-FileCopyrightText: 2017 Roman Gilg <subdiff@gmail.com>
3 
4     SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #ifndef KWINWAYLANDTOUCHPAD_H
8 #define KWINWAYLANDTOUCHPAD_H
9 
10 #include <QString>
11 #include <backends/libinputcommon.h>
12 
13 class QDBusInterface;
14 
15 class KWinWaylandTouchpad : public LibinputCommon
16 {
17     Q_OBJECT
18 
19     Q_PROPERTY(qreal scrollFactor READ scrollFactor WRITE setScrollFactor NOTIFY scrollFactorChanged)
20 
21 public:
22     KWinWaylandTouchpad(QString dbusName);
23     ~KWinWaylandTouchpad() override;
24 
25     bool init();
26 
27     bool getConfig();
28     bool getDefaultConfig();
29     bool applyConfig();
30     bool isChangedConfig() const;
31 
32     //
33     // general
name()34     QString name() const override
35     {
36         return m_name.val;
37     }
sysName()38     QString sysName() const
39     {
40         return m_sysName.val;
41     }
supportsDisableEvents()42     bool supportsDisableEvents() const override
43     {
44         return m_supportsDisableEvents.val;
45     }
setEnabled(bool enabled)46     void setEnabled(bool enabled) override
47     {
48         m_enabled.set(enabled);
49     }
isEnabled()50     bool isEnabled() const override
51     {
52         return m_enabled.val;
53     }
54     //
55     // advanced
supportsLeftHanded()56     bool supportsLeftHanded() const override
57     {
58         return m_supportsLeftHanded.val;
59     }
supportsDisableEventsOnExternalMouse()60     bool supportsDisableEventsOnExternalMouse() const override
61     {
62         return m_supportsDisableEventsOnExternalMouse.val;
63     }
supportsDisableWhileTyping()64     bool supportsDisableWhileTyping() const override
65     {
66         return m_supportsDisableWhileTyping.val;
67     }
supportsMiddleEmulation()68     bool supportsMiddleEmulation() const override
69     {
70         return m_supportsMiddleEmulation.val;
71     }
72     //
73     // tapping
setLmrTapButtonMap(bool set)74     void setLmrTapButtonMap(bool set) override
75     {
76         m_lmrTapButtonMap.set(set);
77     }
78     //
79     // acceleration speed and profile
supportsPointerAcceleration()80     bool supportsPointerAcceleration() const override
81     {
82         return m_supportsPointerAcceleration.val;
83     }
supportsPointerAccelerationProfileFlat()84     bool supportsPointerAccelerationProfileFlat() const override
85     {
86         return m_supportsPointerAccelerationProfileFlat.val;
87     }
supportsPointerAccelerationProfileAdaptive()88     bool supportsPointerAccelerationProfileAdaptive() const override
89     {
90         return m_supportsPointerAccelerationProfileAdaptive.val;
91     }
92     //
93     // scrolling
supportsNaturalScroll()94     bool supportsNaturalScroll() const override
95     {
96         return m_supportsNaturalScroll.val;
97     }
supportsHorizontalScrolling()98     bool supportsHorizontalScrolling() const override
99     {
100         return false;
101     }
supportsScrollTwoFinger()102     bool supportsScrollTwoFinger() const override
103     {
104         return m_supportsScrollTwoFinger.val;
105     }
supportsScrollEdge()106     bool supportsScrollEdge() const override
107     {
108         return m_supportsScrollEdge.val;
109     }
supportsScrollOnButtonDown()110     bool supportsScrollOnButtonDown() const override
111     {
112         return m_supportsScrollOnButtonDown.val;
113     }
114 
115     //
116     // Scroll Factor
supportsScrollFactor()117     bool supportsScrollFactor() const override
118     {
119         return true;
120     }
scrollFactor()121     qreal scrollFactor() const
122     {
123         return m_scrollFactor.val;
124     }
setScrollFactor(qreal factor)125     void setScrollFactor(qreal factor)
126     {
127         return m_scrollFactor.set(factor);
128     }
129 
130     //
131     // Click method
supportsClickMethodAreas()132     bool supportsClickMethodAreas() const override
133     {
134         return m_supportsClickMethodAreas.val;
135     }
supportsClickMethodClickfinger()136     bool supportsClickMethodClickfinger() const override
137     {
138         return m_supportsClickMethodClickfinger.val;
139     }
140 
141 Q_SIGNALS:
142     void scrollFactorChanged();
143 
144 private:
145     template<typename T>
146     bool valueLoader(Prop<T> &prop);
147 
148     template<typename T>
149     QString valueWriter(const Prop<T> &prop);
150     //
151     // general
152     Prop<QString> m_name = Prop<QString>("name");
153     Prop<QString> m_sysName = Prop<QString>("sysName");
154 
155     //
156     // advanced
157     Prop<bool> m_supportsLeftHanded = Prop<bool>("supportsLeftHanded");
158     Prop<bool> m_supportsDisableWhileTyping = Prop<bool>("supportsDisableWhileTyping");
159     Prop<bool> m_supportsMiddleEmulation = Prop<bool>("supportsMiddleEmulation");
160 
161     //
162     // acceleration speed and profile
163     Prop<bool> m_supportsPointerAcceleration = Prop<bool>("supportsPointerAcceleration");
164 
165     //
166     // scrolling
167     Prop<bool> m_supportsNaturalScroll = Prop<bool>("supportsNaturalScroll");
168     Prop<qreal> m_scrollFactor = Prop<qreal>("scrollFactor");
169 
170     QDBusInterface *m_iface;
171 };
172 
173 #endif
174