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 };