File indexing completed on 2024-06-23 05:29:38

0001 /*
0002     SPDX-FileCopyrightText: 2019 Atul Bisht <atulbisht26@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "backends/libinputcommon.h"
0010 #include "xlibtouchpad.h"
0011 
0012 #include <KConfigGroup>
0013 #include <KSharedConfig>
0014 
0015 class LibinputTouchpad : public LibinputCommon, public XlibTouchpad
0016 {
0017     Q_OBJECT
0018 
0019 public:
0020     LibinputTouchpad(Display *display, int deviceId);
0021     ~LibinputTouchpad() override
0022     {
0023     }
0024 
0025     bool getConfig() override;
0026     bool applyConfig() override;
0027     bool getDefaultConfig() override;
0028     bool isChangedConfig() override;
0029 
0030     int touchpadOff() override;
0031     XcbAtom &touchpadOffAtom() override;
0032 
0033 private:
0034     template<typename T>
0035     bool valueLoader(Prop<T> &prop);
0036 
0037     template<typename T>
0038     QString valueWriter(const Prop<T> &prop);
0039 
0040     KSharedConfigPtr m_config;
0041 
0042     //
0043     // general
0044     QString name() const override
0045     {
0046         return m_name;
0047     }
0048     bool supportsDisableEvents() const override
0049     {
0050         return m_supportsDisableEvents.avail && m_supportsDisableEvents.val;
0051     }
0052     bool isEnabled() const override
0053     {
0054         return !m_enabled.val;
0055     }
0056     void setEnabled(bool set) override
0057     {
0058         m_enabled.set(!set);
0059     }
0060     //
0061     // Tapping
0062     void setLmrTapButtonMap(bool set) override
0063     {
0064         m_lrmTapButtonMap.set(!set);
0065         m_lmrTapButtonMap.set(set);
0066     }
0067     //
0068     // advanced
0069     bool supportsLeftHanded() const override
0070     {
0071         return m_leftHanded.avail;
0072     }
0073     bool supportsDisableEventsOnExternalMouse() const override
0074     {
0075         return m_supportsDisableEventsOnExternalMouse.avail && m_supportsDisableEventsOnExternalMouse.val;
0076     }
0077     bool supportsDisableWhileTyping() const override
0078     {
0079         return m_disableWhileTyping.avail;
0080     }
0081     bool supportsMiddleEmulation() const override
0082     {
0083         return m_middleEmulation.avail;
0084     }
0085     //
0086     // acceleration speed and profile
0087     bool supportsPointerAcceleration() const override
0088     {
0089         return m_pointerAcceleration.avail;
0090     }
0091     bool supportsPointerAccelerationProfileFlat() const override
0092     {
0093         return m_supportsPointerAccelerationProfileFlat.avail && m_supportsPointerAccelerationProfileFlat.val;
0094     }
0095     bool supportsPointerAccelerationProfileAdaptive() const override
0096     {
0097         return m_supportsPointerAccelerationProfileAdaptive.avail && m_supportsPointerAccelerationProfileAdaptive.val;
0098     }
0099     //
0100     // scrolling
0101     bool supportsNaturalScroll() const override
0102     {
0103         return m_naturalScroll.avail;
0104     }
0105     bool supportsHorizontalScrolling() const override
0106     {
0107         return true;
0108     }
0109     bool supportsScrollTwoFinger() const override
0110     {
0111         return m_supportsScrollTwoFinger.avail && m_supportsScrollTwoFinger.val;
0112     }
0113     bool supportsScrollEdge() const override
0114     {
0115         return m_supportsScrollEdge.avail && m_supportsScrollEdge.val;
0116     }
0117     bool supportsScrollOnButtonDown() const override
0118     {
0119         return m_supportsScrollOnButtonDown.avail && m_supportsScrollOnButtonDown.val;
0120     }
0121     //
0122     // click method
0123     bool supportsClickMethodAreas() const override
0124     {
0125         return m_supportsClickMethodAreas.avail && m_supportsClickMethodAreas.val;
0126     }
0127     bool supportsClickMethodClickfinger() const override
0128     {
0129         return m_supportsClickMethodClickfinger.avail && m_supportsClickMethodClickfinger.val;
0130     }
0131 
0132     bool supportsScrollFactor() const override
0133     {
0134         return false;
0135     }
0136 
0137     // Tapping
0138     Prop<bool> m_lrmTapButtonMapEnabledByDefault = PropBool("lrmTapButtonMapEnabledByDefault");
0139     Prop<bool> m_lrmTapButtonMap = PropBool("lrmTapButtonMap");
0140     //
0141     // advanced
0142     Prop<bool> m_disableEventsOnExternalMouse = PropBool("disableEventsOnExternalMouse");
0143     Prop<bool> m_disableEventsOnExternalMouseDefault = PropBool("disableEventsOnExternalMouseDefault");
0144 
0145     QString m_name;
0146 };