File indexing completed on 2024-11-24 05:00:47

0001 /*
0002     SPDX-FileCopyrightText: 2017 Roman Gilg <subdiff@gmail.com>
0003     SPDX-FileCopyrightText: 2019 Atul Bisht <atulbisht26@gmail.com>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #pragma once
0009 
0010 #include <QObject>
0011 #include <QVariant>
0012 
0013 namespace
0014 {
0015 template<typename T>
0016 inline T valueLoaderPart(QVariant const &reply)
0017 {
0018     Q_UNUSED(reply);
0019     return T();
0020 }
0021 
0022 template<>
0023 inline bool valueLoaderPart(QVariant const &reply)
0024 {
0025     return reply.toBool();
0026 }
0027 
0028 template<>
0029 inline int valueLoaderPart(QVariant const &reply)
0030 {
0031     return reply.toInt();
0032 }
0033 
0034 template<>
0035 inline quint32 valueLoaderPart(QVariant const &reply)
0036 {
0037     return reply.toInt();
0038 }
0039 
0040 template<>
0041 inline qreal valueLoaderPart(QVariant const &reply)
0042 {
0043     return reply.toReal();
0044 }
0045 
0046 template<>
0047 inline QString valueLoaderPart(QVariant const &reply)
0048 {
0049     return reply.toString();
0050 }
0051 
0052 template<>
0053 inline Qt::MouseButtons valueLoaderPart(QVariant const &reply)
0054 {
0055     return static_cast<Qt::MouseButtons>(reply.toInt());
0056 }
0057 }
0058 
0059 class LibinputCommon : public QObject
0060 {
0061     Q_OBJECT
0062 
0063     //
0064     // general
0065     Q_PROPERTY(QString name READ name CONSTANT)
0066     Q_PROPERTY(bool supportsDisableEvents READ supportsDisableEvents CONSTANT)
0067     Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged)
0068 
0069     //
0070     // advanced
0071     Q_PROPERTY(Qt::MouseButtons supportedButtons READ supportedButtons CONSTANT)
0072 
0073     Q_PROPERTY(bool supportsLeftHanded READ supportsLeftHanded CONSTANT)
0074     Q_PROPERTY(bool leftHandedEnabledByDefault READ leftHandedEnabledByDefault CONSTANT)
0075     Q_PROPERTY(bool leftHanded READ isLeftHanded WRITE setLeftHanded NOTIFY leftHandedChanged)
0076 
0077     Q_PROPERTY(bool supportsDisableEventsOnExternalMouse READ supportsDisableEventsOnExternalMouse CONSTANT)
0078 
0079     Q_PROPERTY(bool supportsDisableWhileTyping READ supportsDisableWhileTyping CONSTANT)
0080     Q_PROPERTY(bool disableWhileTypingEnabledByDefault READ disableWhileTypingEnabledByDefault CONSTANT)
0081     Q_PROPERTY(bool disableWhileTyping READ isDisableWhileTyping WRITE setDisableWhileTyping NOTIFY disableWhileTypingChanged)
0082 
0083     Q_PROPERTY(bool supportsMiddleEmulation READ supportsMiddleEmulation CONSTANT)
0084     Q_PROPERTY(bool middleEmulationEnabledByDefault READ middleEmulationEnabledByDefault CONSTANT)
0085     Q_PROPERTY(bool middleEmulation READ isMiddleEmulation WRITE setMiddleEmulation NOTIFY middleEmulationChanged)
0086 
0087     //
0088     // acceleration speed and profile
0089     Q_PROPERTY(bool supportsPointerAcceleration READ supportsPointerAcceleration CONSTANT)
0090     Q_PROPERTY(qreal pointerAcceleration READ pointerAcceleration WRITE setPointerAcceleration NOTIFY pointerAccelerationChanged)
0091 
0092     Q_PROPERTY(bool supportsPointerAccelerationProfileFlat READ supportsPointerAccelerationProfileFlat CONSTANT)
0093     Q_PROPERTY(bool defaultPointerAccelerationProfileFlat READ defaultPointerAccelerationProfileFlat CONSTANT)
0094     Q_PROPERTY(bool pointerAccelerationProfileFlat READ pointerAccelerationProfileFlat WRITE setPointerAccelerationProfileFlat NOTIFY
0095                    pointerAccelerationProfileChanged)
0096 
0097     Q_PROPERTY(bool supportsPointerAccelerationProfileAdaptive READ supportsPointerAccelerationProfileAdaptive CONSTANT)
0098     Q_PROPERTY(bool defaultPointerAccelerationProfileAdaptive READ defaultPointerAccelerationProfileAdaptive CONSTANT)
0099     Q_PROPERTY(bool pointerAccelerationProfileAdaptive READ pointerAccelerationProfileAdaptive WRITE setPointerAccelerationProfileAdaptive NOTIFY
0100                    pointerAccelerationProfileChanged)
0101 
0102     //
0103     // tapping
0104     Q_PROPERTY(int tapFingerCount READ tapFingerCount CONSTANT)
0105     Q_PROPERTY(bool tapToClickEnabledByDefault READ tapToClickEnabledByDefault CONSTANT)
0106     Q_PROPERTY(bool tapToClick READ isTapToClick WRITE setTapToClick NOTIFY tapToClickChanged)
0107 
0108     Q_PROPERTY(bool supportsLmrTapButtonMap READ supportsLmrTapButtonMap CONSTANT)
0109     Q_PROPERTY(bool lmrTapButtonMapEnabledByDefault READ lmrTapButtonMapEnabledByDefault CONSTANT)
0110     Q_PROPERTY(bool lmrTapButtonMap READ lmrTapButtonMap WRITE setLmrTapButtonMap NOTIFY lmrTapButtonMapChanged)
0111 
0112     Q_PROPERTY(bool tapAndDragEnabledByDefault READ tapAndDragEnabledByDefault CONSTANT)
0113     Q_PROPERTY(bool tapAndDrag READ isTapAndDrag WRITE setTapAndDrag NOTIFY tapAndDragChanged)
0114 
0115     Q_PROPERTY(bool tapDragLockEnabledByDefault READ tapDragLockEnabledByDefault CONSTANT)
0116     Q_PROPERTY(bool tapDragLock READ isTapDragLock WRITE setTapDragLock NOTIFY tapDragLockChanged)
0117 
0118     //
0119     // scrolling
0120     Q_PROPERTY(bool supportsNaturalScroll READ supportsNaturalScroll CONSTANT)
0121     Q_PROPERTY(bool naturalScrollEnabledByDefault READ naturalScrollEnabledByDefault CONSTANT)
0122     Q_PROPERTY(bool naturalScroll READ isNaturalScroll WRITE setNaturalScroll NOTIFY naturalScrollChanged)
0123 
0124     Q_PROPERTY(bool supportsHorizontalScrolling READ supportsHorizontalScrolling CONSTANT)
0125     Q_PROPERTY(bool horizontalScrollingByDefault READ horizontalScrollingByDefault CONSTANT)
0126     Q_PROPERTY(bool horizontalScrolling READ horizontalScrolling WRITE setHorizontalScrolling NOTIFY horizontalScrollingChanged)
0127 
0128     Q_PROPERTY(bool supportsScrollTwoFinger READ supportsScrollTwoFinger CONSTANT)
0129     Q_PROPERTY(bool scrollTwoFingerEnabledByDefault READ scrollTwoFingerEnabledByDefault CONSTANT)
0130     Q_PROPERTY(bool scrollTwoFinger READ isScrollTwoFinger WRITE setScrollTwoFinger NOTIFY scrollMethodChanged)
0131 
0132     Q_PROPERTY(bool supportsScrollEdge READ supportsScrollEdge CONSTANT)
0133     Q_PROPERTY(bool scrollEdgeEnabledByDefault READ scrollEdgeEnabledByDefault CONSTANT)
0134     Q_PROPERTY(bool scrollEdge READ isScrollEdge WRITE setScrollEdge NOTIFY scrollMethodChanged)
0135 
0136     Q_PROPERTY(bool supportsScrollOnButtonDown READ supportsScrollOnButtonDown CONSTANT)
0137     Q_PROPERTY(bool scrollOnButtonDownEnabledByDefault READ scrollOnButtonDownEnabledByDefault CONSTANT)
0138     Q_PROPERTY(bool scrollOnButtonDown READ isScrollOnButtonDown WRITE setScrollOnButtonDown NOTIFY scrollMethodChanged)
0139 
0140     Q_PROPERTY(quint32 defaultScrollButton READ defaultScrollButton CONSTANT)
0141     Q_PROPERTY(quint32 scrollButton READ scrollButton WRITE setScrollButton NOTIFY scrollButtonChanged)
0142 
0143     // Click Methods
0144     Q_PROPERTY(bool supportsClickMethodAreas READ supportsClickMethodAreas CONSTANT)
0145     Q_PROPERTY(bool defaultClickMethodAreas READ defaultClickMethodAreas CONSTANT)
0146     Q_PROPERTY(bool clickMethodAreas READ isClickMethodAreas WRITE setClickMethodAreas NOTIFY clickMethodChanged)
0147 
0148     Q_PROPERTY(bool supportsClickMethodClickfinger READ supportsClickMethodClickfinger CONSTANT)
0149     Q_PROPERTY(bool defaultClickMethodClickfinger READ defaultClickMethodClickfinger CONSTANT)
0150     Q_PROPERTY(bool clickMethodClickfinger READ isClickMethodClickfinger WRITE setClickMethodClickfinger NOTIFY clickMethodChanged)
0151 
0152     Q_PROPERTY(bool supportsScrollFactor READ supportsScrollFactor CONSTANT)
0153 public:
0154     LibinputCommon()
0155     {
0156     }
0157     virtual ~LibinputCommon()
0158     {
0159     }
0160 
0161     virtual QString name() const = 0;
0162     virtual bool supportsDisableEvents() const = 0;
0163     virtual bool isEnabled() const = 0;
0164     virtual void setEnabled(bool set) = 0;
0165 
0166     //
0167     // advanced
0168     Qt::MouseButtons supportedButtons() const
0169     {
0170         return m_supportedButtons.val;
0171     }
0172 
0173     virtual bool supportsLeftHanded() const = 0;
0174     bool leftHandedEnabledByDefault() const
0175     {
0176         return m_leftHandedEnabledByDefault.val;
0177     }
0178     bool isLeftHanded() const
0179     {
0180         return m_leftHanded.val;
0181     }
0182     void setLeftHanded(bool set)
0183     {
0184         m_leftHanded.set(set);
0185     }
0186 
0187     virtual bool supportsDisableEventsOnExternalMouse() const = 0;
0188 
0189     virtual bool supportsDisableWhileTyping() const = 0;
0190     bool disableWhileTypingEnabledByDefault() const
0191     {
0192         return m_disableWhileTypingEnabledByDefault.val;
0193     }
0194     bool isDisableWhileTyping() const
0195     {
0196         return m_disableWhileTyping.val;
0197     }
0198     void setDisableWhileTyping(bool set)
0199     {
0200         m_disableWhileTyping.set(set);
0201     }
0202 
0203     virtual bool supportsMiddleEmulation() const = 0;
0204     bool middleEmulationEnabledByDefault() const
0205     {
0206         return m_middleEmulationEnabledByDefault.val;
0207     }
0208     bool isMiddleEmulation() const
0209     {
0210         return m_middleEmulation.val;
0211     }
0212     void setMiddleEmulation(bool set)
0213     {
0214         m_middleEmulation.set(set);
0215     }
0216 
0217     virtual bool supportsPointerAcceleration() const = 0;
0218     qreal pointerAcceleration() const
0219     {
0220         return m_pointerAcceleration.val;
0221     }
0222     void setPointerAcceleration(qreal acceleration)
0223     {
0224         m_pointerAcceleration.set(acceleration);
0225     }
0226 
0227     virtual bool supportsPointerAccelerationProfileFlat() const = 0;
0228     bool defaultPointerAccelerationProfileFlat() const
0229     {
0230         return m_defaultPointerAccelerationProfileFlat.val;
0231     }
0232     bool pointerAccelerationProfileFlat() const
0233     {
0234         return m_pointerAccelerationProfileFlat.val;
0235     }
0236     void setPointerAccelerationProfileFlat(bool set)
0237     {
0238         m_pointerAccelerationProfileFlat.set(set);
0239     }
0240 
0241     virtual bool supportsPointerAccelerationProfileAdaptive() const = 0;
0242     bool defaultPointerAccelerationProfileAdaptive() const
0243     {
0244         return m_defaultPointerAccelerationProfileAdaptive.val;
0245     }
0246     bool pointerAccelerationProfileAdaptive() const
0247     {
0248         return m_pointerAccelerationProfileAdaptive.val;
0249     }
0250     void setPointerAccelerationProfileAdaptive(bool set)
0251     {
0252         m_pointerAccelerationProfileAdaptive.set(set);
0253     }
0254 
0255     //
0256     // scrolling
0257     virtual bool supportsNaturalScroll() const = 0;
0258     bool naturalScrollEnabledByDefault() const
0259     {
0260         return m_naturalScrollEnabledByDefault.val;
0261     }
0262     bool isNaturalScroll() const
0263     {
0264         return m_naturalScroll.val;
0265     }
0266     void setNaturalScroll(bool set)
0267     {
0268         m_naturalScroll.set(set);
0269     }
0270 
0271     virtual bool supportsHorizontalScrolling() const = 0;
0272     bool horizontalScrollingByDefault() const
0273     {
0274         return true;
0275     }
0276     bool horizontalScrolling() const
0277     {
0278         return m_horizontalScrolling.val;
0279     }
0280     void setHorizontalScrolling(bool set)
0281     {
0282         m_horizontalScrolling.set(set);
0283     }
0284 
0285     virtual bool supportsScrollTwoFinger() const = 0;
0286     bool scrollTwoFingerEnabledByDefault() const
0287     {
0288         return m_scrollTwoFingerEnabledByDefault.val;
0289     }
0290     bool isScrollTwoFinger() const
0291     {
0292         return m_isScrollTwoFinger.val;
0293     }
0294     void setScrollTwoFinger(bool set)
0295     {
0296         m_isScrollTwoFinger.set(set);
0297     }
0298 
0299     virtual bool supportsScrollEdge() const = 0;
0300     bool scrollEdgeEnabledByDefault() const
0301     {
0302         return m_scrollEdgeEnabledByDefault.val;
0303     }
0304     bool isScrollEdge() const
0305     {
0306         return m_isScrollEdge.val;
0307     }
0308     void setScrollEdge(bool set)
0309     {
0310         m_isScrollEdge.set(set);
0311     }
0312 
0313     virtual bool supportsScrollOnButtonDown() const = 0;
0314     bool scrollOnButtonDownEnabledByDefault() const
0315     {
0316         return m_scrollOnButtonDownEnabledByDefault.val;
0317     }
0318     bool isScrollOnButtonDown() const
0319     {
0320         return m_isScrollOnButtonDown.val;
0321     }
0322     void setScrollOnButtonDown(bool set)
0323     {
0324         m_isScrollOnButtonDown.set(set);
0325     }
0326 
0327     quint32 defaultScrollButton() const
0328     {
0329         return m_defaultScrollButton.val;
0330     }
0331     quint32 scrollButton() const
0332     {
0333         return m_scrollButton.val;
0334     }
0335     void setScrollButton(quint32 button)
0336     {
0337         m_scrollButton.set(button);
0338     }
0339 
0340     //
0341     // tapping
0342     int tapFingerCount() const
0343     {
0344         return m_tapFingerCount.val;
0345     }
0346     bool tapToClickEnabledByDefault() const
0347     {
0348         return m_tapToClickEnabledByDefault.val;
0349     }
0350     bool isTapToClick() const
0351     {
0352         return m_tapToClick.val;
0353     }
0354     void setTapToClick(bool set)
0355     {
0356         m_tapToClick.set(set);
0357     }
0358 
0359     bool supportsLmrTapButtonMap() const
0360     {
0361         return m_tapFingerCount.val > 1;
0362     }
0363     bool lmrTapButtonMapEnabledByDefault() const
0364     {
0365         return m_lmrTapButtonMapEnabledByDefault.val;
0366     }
0367     bool lmrTapButtonMap() const
0368     {
0369         return m_lmrTapButtonMap.val;
0370     }
0371     virtual void setLmrTapButtonMap(bool set) = 0;
0372 
0373     bool tapAndDragEnabledByDefault() const
0374     {
0375         return m_tapAndDragEnabledByDefault.val;
0376     }
0377     bool isTapAndDrag() const
0378     {
0379         return m_tapAndDrag.val;
0380     }
0381     void setTapAndDrag(bool set)
0382     {
0383         m_tapAndDrag.set(set);
0384     }
0385 
0386     bool tapDragLockEnabledByDefault() const
0387     {
0388         return m_tapDragLockEnabledByDefault.val;
0389     }
0390     bool isTapDragLock() const
0391     {
0392         return m_tapDragLock.val;
0393     }
0394     void setTapDragLock(bool set)
0395     {
0396         m_tapDragLock.set(set);
0397     }
0398 
0399     //
0400     // click method
0401     virtual bool supportsClickMethodAreas() const = 0;
0402     bool defaultClickMethodAreas() const
0403     {
0404         return m_defaultClickMethodAreas.val;
0405     }
0406     bool isClickMethodAreas() const
0407     {
0408         return m_clickMethodAreas.val;
0409     }
0410     void setClickMethodAreas(bool set)
0411     {
0412         m_clickMethodAreas.set(set);
0413     }
0414 
0415     virtual bool supportsClickMethodClickfinger() const = 0;
0416     bool defaultClickMethodClickfinger() const
0417     {
0418         return m_defaultClickMethodClickfinger.val;
0419     }
0420     bool isClickMethodClickfinger() const
0421     {
0422         return m_clickMethodClickfinger.val;
0423     }
0424     void setClickMethodClickfinger(bool set)
0425     {
0426         m_clickMethodClickfinger.set(set);
0427     }
0428 
0429     virtual bool supportsScrollFactor() const = 0;
0430 
0431 Q_SIGNALS:
0432     void enabledChanged();
0433     // Tapping
0434     void tapToClickChanged();
0435     void lmrTapButtonMapChanged();
0436     void tapAndDragChanged();
0437     void tapDragLockChanged();
0438     // Advanced
0439     void leftHandedChanged();
0440     void disableWhileTypingChanged();
0441     void middleEmulationChanged();
0442     // acceleration speed and profile
0443     void pointerAccelerationChanged();
0444     void pointerAccelerationProfileChanged();
0445     // scrolling
0446     void naturalScrollChanged();
0447     void horizontalScrollingChanged();
0448     void scrollMethodChanged();
0449     void scrollButtonChanged();
0450     // click methods
0451     void clickMethodChanged();
0452 
0453 protected:
0454     template<typename T>
0455     struct Prop {
0456         explicit Prop(const QByteArray &name, T initialValue)
0457             : name(name)
0458             , avail(false)
0459             , old(initialValue)
0460             , val(initialValue)
0461         {
0462         }
0463 
0464         void set(T newVal)
0465         {
0466             if (avail && val != newVal) {
0467                 val = newVal;
0468             }
0469         }
0470         void set(const Prop<T> &p)
0471         {
0472             if (avail && val != p.val) {
0473                 val = p.val;
0474             }
0475         }
0476         bool changed() const
0477         {
0478             return avail && (old != val);
0479         }
0480 
0481         // In wayland, name will be dbus name
0482         QByteArray name;
0483         bool avail;
0484         T old;
0485         T val;
0486     };
0487 
0488     struct PropInt : public Prop<int> {
0489         explicit PropInt(const QByteArray &name)
0490             : Prop<int>(name, 0)
0491         {
0492         }
0493     };
0494 
0495     struct PropReal : public Prop<qreal> {
0496         explicit PropReal(const QByteArray &name)
0497             : Prop<qreal>(name, false)
0498         {
0499         }
0500     };
0501 
0502     struct PropBool : public Prop<bool> {
0503         explicit PropBool(const QByteArray &name)
0504             : Prop<bool>(name, 0)
0505         {
0506         }
0507     };
0508 
0509     //
0510     // general
0511     PropBool m_supportsDisableEvents = PropBool("supportsDisableEvents");
0512     PropBool m_enabledDefault = PropBool("enabledDefault");
0513     PropBool m_enabled = PropBool("enabled");
0514 
0515     //
0516     // advanced
0517     Prop<Qt::MouseButtons> m_supportedButtons = Prop<Qt::MouseButtons>("supportedButtons", Qt::MouseButton::NoButton);
0518 
0519     PropBool m_leftHandedEnabledByDefault = PropBool("leftHandedEnabledByDefault");
0520     PropBool m_leftHanded = PropBool("leftHanded");
0521 
0522     PropBool m_supportsDisableEventsOnExternalMouse = PropBool("supportsDisableEventsOnExternalMouse");
0523 
0524     PropBool m_disableWhileTypingEnabledByDefault = PropBool("disableWhileTypingEnabledByDefault");
0525     PropBool m_disableWhileTyping = PropBool("disableWhileTyping");
0526 
0527     PropBool m_middleEmulationEnabledByDefault = PropBool("middleEmulationEnabledByDefault");
0528     PropBool m_middleEmulation = PropBool("middleEmulation");
0529 
0530     //
0531     // acceleration speed and profile
0532     Prop<qreal> m_defaultPointerAcceleration = PropReal("defaultPointerAcceleration");
0533     Prop<qreal> m_pointerAcceleration = PropReal("pointerAcceleration");
0534 
0535     PropBool m_supportsPointerAccelerationProfileFlat = PropBool("supportsPointerAccelerationProfileFlat");
0536     PropBool m_defaultPointerAccelerationProfileFlat = PropBool("defaultPointerAccelerationProfileFlat");
0537     PropBool m_pointerAccelerationProfileFlat = PropBool("pointerAccelerationProfileFlat");
0538 
0539     PropBool m_supportsPointerAccelerationProfileAdaptive = PropBool("supportsPointerAccelerationProfileAdaptive");
0540     PropBool m_defaultPointerAccelerationProfileAdaptive = PropBool("defaultPointerAccelerationProfileAdaptive");
0541     PropBool m_pointerAccelerationProfileAdaptive = PropBool("pointerAccelerationProfileAdaptive");
0542 
0543     //
0544     // tapping
0545     Prop<int> m_tapFingerCount = PropInt("tapFingerCount");
0546     PropBool m_tapToClickEnabledByDefault = PropBool("tapToClickEnabledByDefault");
0547     PropBool m_tapToClick = PropBool("tapToClick");
0548 
0549     PropBool m_lmrTapButtonMapEnabledByDefault = PropBool("lmrTapButtonMapEnabledByDefault");
0550     PropBool m_lmrTapButtonMap = PropBool("lmrTapButtonMap");
0551 
0552     PropBool m_tapAndDragEnabledByDefault = PropBool("tapAndDragEnabledByDefault");
0553     PropBool m_tapAndDrag = PropBool("tapAndDrag");
0554     PropBool m_tapDragLockEnabledByDefault = PropBool("tapDragLockEnabledByDefault");
0555     PropBool m_tapDragLock = PropBool("tapDragLock");
0556 
0557     //
0558     // scrolling
0559     PropBool m_naturalScrollEnabledByDefault = PropBool("naturalScrollEnabledByDefault");
0560     PropBool m_naturalScroll = PropBool("naturalScroll");
0561 
0562     PropBool m_horizontalScrolling = PropBool("horizontalScrolling");
0563 
0564     PropBool m_supportsScrollTwoFinger = PropBool("supportsScrollTwoFinger");
0565     PropBool m_scrollTwoFingerEnabledByDefault = PropBool("scrollTwoFingerEnabledByDefault");
0566     PropBool m_isScrollTwoFinger = PropBool("scrollTwoFinger");
0567 
0568     PropBool m_supportsScrollEdge = PropBool("supportsScrollEdge");
0569     PropBool m_scrollEdgeEnabledByDefault = PropBool("scrollEdgeEnabledByDefault");
0570     PropBool m_isScrollEdge = PropBool("scrollEdge");
0571 
0572     PropBool m_supportsScrollOnButtonDown = PropBool("supportsScrollOnButtonDown");
0573     PropBool m_scrollOnButtonDownEnabledByDefault = PropBool("scrollOnButtonDownEnabledByDefault");
0574     PropBool m_isScrollOnButtonDown = PropBool("scrollOnButtonDown");
0575 
0576     Prop<quint32> m_defaultScrollButton = Prop<quint32>("defaultScrollButton", 0);
0577     Prop<quint32> m_scrollButton = Prop<quint32>("scrollButton", 0);
0578 
0579     // Click Method
0580     PropBool m_supportsClickMethodAreas = PropBool("supportsClickMethodAreas");
0581     PropBool m_defaultClickMethodAreas = PropBool("defaultClickMethodAreas");
0582     PropBool m_clickMethodAreas = PropBool("clickMethodAreas");
0583 
0584     PropBool m_supportsClickMethodClickfinger = PropBool("supportsClickMethodClickfinger");
0585     PropBool m_defaultClickMethodClickfinger = PropBool("defaultClickMethodClickfinger");
0586     PropBool m_clickMethodClickfinger = PropBool("clickMethodClickfinger");
0587 };