1 /*
2     SPDX-FileCopyrightText: 2017 Roman Gilg <subdiff@gmail.com>
3     SPDX-FileCopyrightText: 2019 Atul Bisht <atulbisht26@gmail.com>
4 
5     SPDX-License-Identifier: GPL-2.0-or-later
6 */
7 
8 #ifndef LIBINPUTCOMMON_H
9 #define LIBINPUTCOMMON_H
10 
11 #include <QObject>
12 #include <QVariant>
13 
14 namespace
15 {
16 template<typename T>
valueLoaderPart(QVariant const & reply)17 inline T valueLoaderPart(QVariant const &reply)
18 {
19     Q_UNUSED(reply);
20     return T();
21 }
22 
23 template<>
valueLoaderPart(QVariant const & reply)24 inline bool valueLoaderPart(QVariant const &reply)
25 {
26     return reply.toBool();
27 }
28 
29 template<>
valueLoaderPart(QVariant const & reply)30 inline int valueLoaderPart(QVariant const &reply)
31 {
32     return reply.toInt();
33 }
34 
35 template<>
valueLoaderPart(QVariant const & reply)36 inline quint32 valueLoaderPart(QVariant const &reply)
37 {
38     return reply.toInt();
39 }
40 
41 template<>
valueLoaderPart(QVariant const & reply)42 inline qreal valueLoaderPart(QVariant const &reply)
43 {
44     return reply.toReal();
45 }
46 
47 template<>
valueLoaderPart(QVariant const & reply)48 inline QString valueLoaderPart(QVariant const &reply)
49 {
50     return reply.toString();
51 }
52 
53 template<>
valueLoaderPart(QVariant const & reply)54 inline Qt::MouseButtons valueLoaderPart(QVariant const &reply)
55 {
56     return static_cast<Qt::MouseButtons>(reply.toInt());
57 }
58 }
59 
60 class LibinputCommon : public QObject
61 {
62     Q_OBJECT
63 
64     //
65     // general
Q_PROPERTY(QString name READ name CONSTANT)66     Q_PROPERTY(QString name READ name CONSTANT)
67     Q_PROPERTY(bool supportsDisableEvents READ supportsDisableEvents CONSTANT)
68     Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged)
69 
70     //
71     // advanced
72     Q_PROPERTY(Qt::MouseButtons supportedButtons READ supportedButtons CONSTANT)
73 
74     Q_PROPERTY(bool supportsLeftHanded READ supportsLeftHanded CONSTANT)
75     Q_PROPERTY(bool leftHandedEnabledByDefault READ leftHandedEnabledByDefault CONSTANT)
76     Q_PROPERTY(bool leftHanded READ isLeftHanded WRITE setLeftHanded NOTIFY leftHandedChanged)
77 
78     Q_PROPERTY(bool supportsDisableEventsOnExternalMouse READ supportsDisableEventsOnExternalMouse CONSTANT)
79 
80     Q_PROPERTY(bool supportsDisableWhileTyping READ supportsDisableWhileTyping CONSTANT)
81     Q_PROPERTY(bool disableWhileTypingEnabledByDefault READ disableWhileTypingEnabledByDefault CONSTANT)
82     Q_PROPERTY(bool disableWhileTyping READ isDisableWhileTyping WRITE setDisableWhileTyping NOTIFY disableWhileTypingChanged)
83 
84     Q_PROPERTY(bool supportsMiddleEmulation READ supportsMiddleEmulation CONSTANT)
85     Q_PROPERTY(bool middleEmulationEnabledByDefault READ middleEmulationEnabledByDefault CONSTANT)
86     Q_PROPERTY(bool middleEmulation READ isMiddleEmulation WRITE setMiddleEmulation NOTIFY middleEmulationChanged)
87 
88     //
89     // acceleration speed and profile
90     Q_PROPERTY(bool supportsPointerAcceleration READ supportsPointerAcceleration CONSTANT)
91     Q_PROPERTY(qreal pointerAcceleration READ pointerAcceleration WRITE setPointerAcceleration NOTIFY pointerAccelerationChanged)
92 
93     Q_PROPERTY(bool supportsPointerAccelerationProfileFlat READ supportsPointerAccelerationProfileFlat CONSTANT)
94     Q_PROPERTY(bool defaultPointerAccelerationProfileFlat READ defaultPointerAccelerationProfileFlat CONSTANT)
95     Q_PROPERTY(bool pointerAccelerationProfileFlat READ pointerAccelerationProfileFlat WRITE setPointerAccelerationProfileFlat NOTIFY
96                    pointerAccelerationProfileChanged)
97 
98     Q_PROPERTY(bool supportsPointerAccelerationProfileAdaptive READ supportsPointerAccelerationProfileAdaptive CONSTANT)
99     Q_PROPERTY(bool defaultPointerAccelerationProfileAdaptive READ defaultPointerAccelerationProfileAdaptive CONSTANT)
100     Q_PROPERTY(bool pointerAccelerationProfileAdaptive READ pointerAccelerationProfileAdaptive WRITE setPointerAccelerationProfileAdaptive NOTIFY
101                    pointerAccelerationProfileChanged)
102 
103     //
104     // tapping
105     Q_PROPERTY(int tapFingerCount READ tapFingerCount CONSTANT)
106     Q_PROPERTY(bool tapToClickEnabledByDefault READ tapToClickEnabledByDefault CONSTANT)
107     Q_PROPERTY(bool tapToClick READ isTapToClick WRITE setTapToClick NOTIFY tapToClickChanged)
108 
109     Q_PROPERTY(bool supportsLmrTapButtonMap READ supportsLmrTapButtonMap CONSTANT)
110     Q_PROPERTY(bool lmrTapButtonMapEnabledByDefault READ lmrTapButtonMapEnabledByDefault CONSTANT)
111     Q_PROPERTY(bool lmrTapButtonMap READ lmrTapButtonMap WRITE setLmrTapButtonMap NOTIFY lmrTapButtonMapChanged)
112 
113     Q_PROPERTY(bool tapAndDragEnabledByDefault READ tapAndDragEnabledByDefault CONSTANT)
114     Q_PROPERTY(bool tapAndDrag READ isTapAndDrag WRITE setTapAndDrag NOTIFY tapAndDragChanged)
115 
116     Q_PROPERTY(bool tapDragLockEnabledByDefault READ tapDragLockEnabledByDefault CONSTANT)
117     Q_PROPERTY(bool tapDragLock READ isTapDragLock WRITE setTapDragLock NOTIFY tapDragLockChanged)
118 
119     //
120     // scrolling
121     Q_PROPERTY(bool supportsNaturalScroll READ supportsNaturalScroll CONSTANT)
122     Q_PROPERTY(bool naturalScrollEnabledByDefault READ naturalScrollEnabledByDefault CONSTANT)
123     Q_PROPERTY(bool naturalScroll READ isNaturalScroll WRITE setNaturalScroll NOTIFY naturalScrollChanged)
124 
125     Q_PROPERTY(bool supportsHorizontalScrolling READ supportsHorizontalScrolling CONSTANT)
126     Q_PROPERTY(bool horizontalScrollingByDefault READ horizontalScrollingByDefault CONSTANT)
127     Q_PROPERTY(bool horizontalScrolling READ horizontalScrolling WRITE setHorizontalScrolling NOTIFY horizontalScrollingChanged)
128 
129     Q_PROPERTY(bool supportsScrollTwoFinger READ supportsScrollTwoFinger CONSTANT)
130     Q_PROPERTY(bool scrollTwoFingerEnabledByDefault READ scrollTwoFingerEnabledByDefault CONSTANT)
131     Q_PROPERTY(bool scrollTwoFinger READ isScrollTwoFinger WRITE setScrollTwoFinger NOTIFY scrollMethodChanged)
132 
133     Q_PROPERTY(bool supportsScrollEdge READ supportsScrollEdge CONSTANT)
134     Q_PROPERTY(bool scrollEdgeEnabledByDefault READ scrollEdgeEnabledByDefault CONSTANT)
135     Q_PROPERTY(bool scrollEdge READ isScrollEdge WRITE setScrollEdge NOTIFY scrollMethodChanged)
136 
137     Q_PROPERTY(bool supportsScrollOnButtonDown READ supportsScrollOnButtonDown CONSTANT)
138     Q_PROPERTY(bool scrollOnButtonDownEnabledByDefault READ scrollOnButtonDownEnabledByDefault CONSTANT)
139     Q_PROPERTY(bool scrollOnButtonDown READ isScrollOnButtonDown WRITE setScrollOnButtonDown NOTIFY scrollMethodChanged)
140 
141     Q_PROPERTY(quint32 defaultScrollButton READ defaultScrollButton CONSTANT)
142     Q_PROPERTY(quint32 scrollButton READ scrollButton WRITE setScrollButton NOTIFY scrollButtonChanged)
143 
144     // Click Methods
145     Q_PROPERTY(bool supportsClickMethodAreas READ supportsClickMethodAreas CONSTANT)
146     Q_PROPERTY(bool defaultClickMethodAreas READ defaultClickMethodAreas CONSTANT)
147     Q_PROPERTY(bool clickMethodAreas READ isClickMethodAreas WRITE setClickMethodAreas NOTIFY clickMethodChanged)
148 
149     Q_PROPERTY(bool supportsClickMethodClickfinger READ supportsClickMethodClickfinger CONSTANT)
150     Q_PROPERTY(bool defaultClickMethodClickfinger READ defaultClickMethodClickfinger CONSTANT)
151     Q_PROPERTY(bool clickMethodClickfinger READ isClickMethodClickfinger WRITE setClickMethodClickfinger NOTIFY clickMethodChanged)
152 
153     Q_PROPERTY(bool supportsScrollFactor READ supportsScrollFactor CONSTANT)
154 public:
155     LibinputCommon()
156     {
157     }
~LibinputCommon()158     virtual ~LibinputCommon()
159     {
160     }
161 
162     virtual QString name() const = 0;
163     virtual bool supportsDisableEvents() const = 0;
164     virtual bool isEnabled() const = 0;
165     virtual void setEnabled(bool set) = 0;
166 
167     //
168     // advanced
supportedButtons()169     Qt::MouseButtons supportedButtons() const
170     {
171         return m_supportedButtons.val;
172     }
173 
174     virtual bool supportsLeftHanded() const = 0;
leftHandedEnabledByDefault()175     bool leftHandedEnabledByDefault() const
176     {
177         return m_leftHandedEnabledByDefault.val;
178     }
isLeftHanded()179     bool isLeftHanded() const
180     {
181         return m_leftHanded.val;
182     }
setLeftHanded(bool set)183     void setLeftHanded(bool set)
184     {
185         m_leftHanded.set(set);
186     }
187 
188     virtual bool supportsDisableEventsOnExternalMouse() const = 0;
189 
190     virtual bool supportsDisableWhileTyping() const = 0;
disableWhileTypingEnabledByDefault()191     bool disableWhileTypingEnabledByDefault() const
192     {
193         return m_disableWhileTypingEnabledByDefault.val;
194     }
isDisableWhileTyping()195     bool isDisableWhileTyping() const
196     {
197         return m_disableWhileTyping.val;
198     }
setDisableWhileTyping(bool set)199     void setDisableWhileTyping(bool set)
200     {
201         m_disableWhileTyping.set(set);
202     }
203 
204     virtual bool supportsMiddleEmulation() const = 0;
middleEmulationEnabledByDefault()205     bool middleEmulationEnabledByDefault() const
206     {
207         return m_middleEmulationEnabledByDefault.val;
208     }
isMiddleEmulation()209     bool isMiddleEmulation() const
210     {
211         return m_middleEmulation.val;
212     }
setMiddleEmulation(bool set)213     void setMiddleEmulation(bool set)
214     {
215         m_middleEmulation.set(set);
216     }
217 
218     virtual bool supportsPointerAcceleration() const = 0;
pointerAcceleration()219     qreal pointerAcceleration() const
220     {
221         return m_pointerAcceleration.val;
222     }
setPointerAcceleration(qreal acceleration)223     void setPointerAcceleration(qreal acceleration)
224     {
225         m_pointerAcceleration.set(acceleration);
226     }
227 
228     virtual bool supportsPointerAccelerationProfileFlat() const = 0;
defaultPointerAccelerationProfileFlat()229     bool defaultPointerAccelerationProfileFlat() const
230     {
231         return m_defaultPointerAccelerationProfileFlat.val;
232     }
pointerAccelerationProfileFlat()233     bool pointerAccelerationProfileFlat() const
234     {
235         return m_pointerAccelerationProfileFlat.val;
236     }
setPointerAccelerationProfileFlat(bool set)237     void setPointerAccelerationProfileFlat(bool set)
238     {
239         m_pointerAccelerationProfileFlat.set(set);
240     }
241 
242     virtual bool supportsPointerAccelerationProfileAdaptive() const = 0;
defaultPointerAccelerationProfileAdaptive()243     bool defaultPointerAccelerationProfileAdaptive() const
244     {
245         return m_defaultPointerAccelerationProfileAdaptive.val;
246     }
pointerAccelerationProfileAdaptive()247     bool pointerAccelerationProfileAdaptive() const
248     {
249         return m_pointerAccelerationProfileAdaptive.val;
250     }
setPointerAccelerationProfileAdaptive(bool set)251     void setPointerAccelerationProfileAdaptive(bool set)
252     {
253         m_pointerAccelerationProfileAdaptive.set(set);
254     }
255 
256     //
257     // scrolling
258     virtual bool supportsNaturalScroll() const = 0;
naturalScrollEnabledByDefault()259     bool naturalScrollEnabledByDefault() const
260     {
261         return m_naturalScrollEnabledByDefault.val;
262     }
isNaturalScroll()263     bool isNaturalScroll() const
264     {
265         return m_naturalScroll.val;
266     }
setNaturalScroll(bool set)267     void setNaturalScroll(bool set)
268     {
269         m_naturalScroll.set(set);
270     }
271 
272     virtual bool supportsHorizontalScrolling() const = 0;
horizontalScrollingByDefault()273     bool horizontalScrollingByDefault() const
274     {
275         return true;
276     }
horizontalScrolling()277     bool horizontalScrolling() const
278     {
279         return m_horizontalScrolling.val;
280     }
setHorizontalScrolling(bool set)281     void setHorizontalScrolling(bool set)
282     {
283         m_horizontalScrolling.set(set);
284     }
285 
286     virtual bool supportsScrollTwoFinger() const = 0;
scrollTwoFingerEnabledByDefault()287     bool scrollTwoFingerEnabledByDefault() const
288     {
289         return m_scrollTwoFingerEnabledByDefault.val;
290     }
isScrollTwoFinger()291     bool isScrollTwoFinger() const
292     {
293         return m_isScrollTwoFinger.val;
294     }
setScrollTwoFinger(bool set)295     void setScrollTwoFinger(bool set)
296     {
297         m_isScrollTwoFinger.set(set);
298     }
299 
300     virtual bool supportsScrollEdge() const = 0;
scrollEdgeEnabledByDefault()301     bool scrollEdgeEnabledByDefault() const
302     {
303         return m_scrollEdgeEnabledByDefault.val;
304     }
isScrollEdge()305     bool isScrollEdge() const
306     {
307         return m_isScrollEdge.val;
308     }
setScrollEdge(bool set)309     void setScrollEdge(bool set)
310     {
311         m_isScrollEdge.set(set);
312     }
313 
314     virtual bool supportsScrollOnButtonDown() const = 0;
scrollOnButtonDownEnabledByDefault()315     bool scrollOnButtonDownEnabledByDefault() const
316     {
317         return m_scrollOnButtonDownEnabledByDefault.val;
318     }
isScrollOnButtonDown()319     bool isScrollOnButtonDown() const
320     {
321         return m_isScrollOnButtonDown.val;
322     }
setScrollOnButtonDown(bool set)323     void setScrollOnButtonDown(bool set)
324     {
325         m_isScrollOnButtonDown.set(set);
326     }
327 
defaultScrollButton()328     quint32 defaultScrollButton() const
329     {
330         return m_defaultScrollButton.val;
331     }
scrollButton()332     quint32 scrollButton() const
333     {
334         return m_scrollButton.val;
335     }
setScrollButton(quint32 button)336     void setScrollButton(quint32 button)
337     {
338         m_scrollButton.set(button);
339     }
340 
341     //
342     // tapping
tapFingerCount()343     int tapFingerCount() const
344     {
345         return m_tapFingerCount.val;
346     }
tapToClickEnabledByDefault()347     bool tapToClickEnabledByDefault() const
348     {
349         return m_tapToClickEnabledByDefault.val;
350     }
isTapToClick()351     bool isTapToClick() const
352     {
353         return m_tapToClick.val;
354     }
setTapToClick(bool set)355     void setTapToClick(bool set)
356     {
357         m_tapToClick.set(set);
358     }
359 
supportsLmrTapButtonMap()360     bool supportsLmrTapButtonMap() const
361     {
362         return m_tapFingerCount.val > 1;
363     }
lmrTapButtonMapEnabledByDefault()364     bool lmrTapButtonMapEnabledByDefault() const
365     {
366         return m_lmrTapButtonMapEnabledByDefault.val;
367     }
lmrTapButtonMap()368     bool lmrTapButtonMap() const
369     {
370         return m_lmrTapButtonMap.val;
371     }
372     virtual void setLmrTapButtonMap(bool set) = 0;
373 
tapAndDragEnabledByDefault()374     bool tapAndDragEnabledByDefault() const
375     {
376         return m_tapAndDragEnabledByDefault.val;
377     }
isTapAndDrag()378     bool isTapAndDrag() const
379     {
380         return m_tapAndDrag.val;
381     }
setTapAndDrag(bool set)382     void setTapAndDrag(bool set)
383     {
384         m_tapAndDrag.set(set);
385     }
386 
tapDragLockEnabledByDefault()387     bool tapDragLockEnabledByDefault() const
388     {
389         return m_tapDragLockEnabledByDefault.val;
390     }
isTapDragLock()391     bool isTapDragLock() const
392     {
393         return m_tapDragLock.val;
394     }
setTapDragLock(bool set)395     void setTapDragLock(bool set)
396     {
397         m_tapDragLock.set(set);
398     }
399 
400     //
401     // click method
402     virtual bool supportsClickMethodAreas() const = 0;
defaultClickMethodAreas()403     bool defaultClickMethodAreas() const
404     {
405         return m_defaultClickMethodAreas.val;
406     }
isClickMethodAreas()407     bool isClickMethodAreas() const
408     {
409         return m_clickMethodAreas.val;
410     }
setClickMethodAreas(bool set)411     void setClickMethodAreas(bool set)
412     {
413         m_clickMethodAreas.set(set);
414     }
415 
416     virtual bool supportsClickMethodClickfinger() const = 0;
defaultClickMethodClickfinger()417     bool defaultClickMethodClickfinger() const
418     {
419         return m_defaultClickMethodClickfinger.val;
420     }
isClickMethodClickfinger()421     bool isClickMethodClickfinger() const
422     {
423         return m_clickMethodClickfinger.val;
424     }
setClickMethodClickfinger(bool set)425     void setClickMethodClickfinger(bool set)
426     {
427         m_clickMethodClickfinger.set(set);
428     }
429 
430     virtual bool supportsScrollFactor() const = 0;
431 
432 Q_SIGNALS:
433     void enabledChanged();
434     // Tapping
435     void tapToClickChanged();
436     void lmrTapButtonMapChanged();
437     void tapAndDragChanged();
438     void tapDragLockChanged();
439     // Advanced
440     void leftHandedChanged();
441     void disableWhileTypingChanged();
442     void middleEmulationChanged();
443     // acceleration speed and profile
444     void pointerAccelerationChanged();
445     void pointerAccelerationProfileChanged();
446     // scrolling
447     void naturalScrollChanged();
448     void horizontalScrollingChanged();
449     void scrollMethodChanged();
450     void scrollButtonChanged();
451     // click methods
452     void clickMethodChanged();
453 
454 protected:
455     template<typename T>
456     struct Prop {
PropProp457         explicit Prop(const QByteArray &name)
458             : name(name)
459         {
460         }
461 
setProp462         void set(T newVal)
463         {
464             if (avail && val != newVal) {
465                 val = newVal;
466             }
467         }
setProp468         void set(const Prop<T> &p)
469         {
470             if (avail && val != p.val) {
471                 val = p.val;
472             }
473         }
changedProp474         bool changed() const
475         {
476             return avail && (old != val);
477         }
478 
479         // In wayland, name will be dbus name
480         QByteArray name;
481         bool avail;
482         T old;
483         T val;
484     };
485 
486     //
487     // general
488     Prop<bool> m_supportsDisableEvents = Prop<bool>("supportsDisableEvents");
489     Prop<bool> m_enabledDefault = Prop<bool>("enabledDefault");
490     Prop<bool> m_enabled = Prop<bool>("enabled");
491 
492     //
493     // advanced
494     Prop<Qt::MouseButtons> m_supportedButtons = Prop<Qt::MouseButtons>("supportedButtons");
495 
496     Prop<bool> m_leftHandedEnabledByDefault = Prop<bool>("leftHandedEnabledByDefault");
497     Prop<bool> m_leftHanded = Prop<bool>("leftHanded");
498 
499     Prop<bool> m_supportsDisableEventsOnExternalMouse = Prop<bool>("supportsDisableEventsOnExternalMouse");
500 
501     Prop<bool> m_disableWhileTypingEnabledByDefault = Prop<bool>("disableWhileTypingEnabledByDefault");
502     Prop<bool> m_disableWhileTyping = Prop<bool>("disableWhileTyping");
503 
504     Prop<bool> m_middleEmulationEnabledByDefault = Prop<bool>("middleEmulationEnabledByDefault");
505     Prop<bool> m_middleEmulation = Prop<bool>("middleEmulation");
506 
507     //
508     // acceleration speed and profile
509     Prop<qreal> m_defaultPointerAcceleration = Prop<qreal>("defaultPointerAcceleration");
510     Prop<qreal> m_pointerAcceleration = Prop<qreal>("pointerAcceleration");
511 
512     Prop<bool> m_supportsPointerAccelerationProfileFlat = Prop<bool>("supportsPointerAccelerationProfileFlat");
513     Prop<bool> m_defaultPointerAccelerationProfileFlat = Prop<bool>("defaultPointerAccelerationProfileFlat");
514     Prop<bool> m_pointerAccelerationProfileFlat = Prop<bool>("pointerAccelerationProfileFlat");
515 
516     Prop<bool> m_supportsPointerAccelerationProfileAdaptive = Prop<bool>("supportsPointerAccelerationProfileAdaptive");
517     Prop<bool> m_defaultPointerAccelerationProfileAdaptive = Prop<bool>("defaultPointerAccelerationProfileAdaptive");
518     Prop<bool> m_pointerAccelerationProfileAdaptive = Prop<bool>("pointerAccelerationProfileAdaptive");
519 
520     //
521     // tapping
522     Prop<int> m_tapFingerCount = Prop<int>("tapFingerCount");
523     Prop<bool> m_tapToClickEnabledByDefault = Prop<bool>("tapToClickEnabledByDefault");
524     Prop<bool> m_tapToClick = Prop<bool>("tapToClick");
525 
526     Prop<bool> m_lmrTapButtonMapEnabledByDefault = Prop<bool>("lmrTapButtonMapEnabledByDefault");
527     Prop<bool> m_lmrTapButtonMap = Prop<bool>("lmrTapButtonMap");
528 
529     Prop<bool> m_tapAndDragEnabledByDefault = Prop<bool>("tapAndDragEnabledByDefault");
530     Prop<bool> m_tapAndDrag = Prop<bool>("tapAndDrag");
531     Prop<bool> m_tapDragLockEnabledByDefault = Prop<bool>("tapDragLockEnabledByDefault");
532     Prop<bool> m_tapDragLock = Prop<bool>("tapDragLock");
533 
534     //
535     // scrolling
536     Prop<bool> m_naturalScrollEnabledByDefault = Prop<bool>("naturalScrollEnabledByDefault");
537     Prop<bool> m_naturalScroll = Prop<bool>("naturalScroll");
538 
539     Prop<bool> m_horizontalScrolling = Prop<bool>("horizontalScrolling");
540 
541     Prop<bool> m_supportsScrollTwoFinger = Prop<bool>("supportsScrollTwoFinger");
542     Prop<bool> m_scrollTwoFingerEnabledByDefault = Prop<bool>("scrollTwoFingerEnabledByDefault");
543     Prop<bool> m_isScrollTwoFinger = Prop<bool>("scrollTwoFinger");
544 
545     Prop<bool> m_supportsScrollEdge = Prop<bool>("supportsScrollEdge");
546     Prop<bool> m_scrollEdgeEnabledByDefault = Prop<bool>("scrollEdgeEnabledByDefault");
547     Prop<bool> m_isScrollEdge = Prop<bool>("scrollEdge");
548 
549     Prop<bool> m_supportsScrollOnButtonDown = Prop<bool>("supportsScrollOnButtonDown");
550     Prop<bool> m_scrollOnButtonDownEnabledByDefault = Prop<bool>("scrollOnButtonDownEnabledByDefault");
551     Prop<bool> m_isScrollOnButtonDown = Prop<bool>("scrollOnButtonDown");
552 
553     Prop<quint32> m_defaultScrollButton = Prop<quint32>("defaultScrollButton");
554     Prop<quint32> m_scrollButton = Prop<quint32>("scrollButton");
555 
556     // Click Method
557     Prop<bool> m_supportsClickMethodAreas = Prop<bool>("supportsClickMethodAreas");
558     Prop<bool> m_defaultClickMethodAreas = Prop<bool>("defaultClickMethodAreas");
559     Prop<bool> m_clickMethodAreas = Prop<bool>("clickMethodAreas");
560 
561     Prop<bool> m_supportsClickMethodClickfinger = Prop<bool>("supportsClickMethodClickfinger");
562     Prop<bool> m_defaultClickMethodClickfinger = Prop<bool>("defaultClickMethodClickfinger");
563     Prop<bool> m_clickMethodClickfinger = Prop<bool>("clickMethodClickfinger");
564 };
565 
566 #endif // LIBINPUTCOMMON_H
567