Index: kcms/touchpad/src/backends/kwin_wayland.cmake =================================================================== --- kcms/touchpad/src/backends/kwin_wayland.cmake +++ kcms/touchpad/src/backends/kwin_wayland.cmake @@ -1,5 +1,6 @@ SET(backend_SRCS ${backend_SRCS} + backends/libinputcommon.cpp backends/kwin_wayland/kwinwaylandbackend.cpp backends/kwin_wayland/kwinwaylandtouchpad.cpp ) Index: kcms/touchpad/src/backends/kwin_wayland/kwinwaylandtouchpad.h =================================================================== --- kcms/touchpad/src/backends/kwin_wayland/kwinwaylandtouchpad.h +++ kcms/touchpad/src/backends/kwin_wayland/kwinwaylandtouchpad.h @@ -19,98 +19,15 @@ #ifndef KWINWAYLANDTOUCHPAD_H #define KWINWAYLANDTOUCHPAD_H -#include +#include #include class QDBusInterface; -class KWinWaylandTouchpad : public QObject +class KWinWaylandTouchpad : public LibinputCommon { Q_OBJECT - // - // general - Q_PROPERTY(QString name READ name CONSTANT) - Q_PROPERTY(bool supportsDisableEvents READ supportsDisableEvents CONSTANT) - Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged) - - // - // advanced - Q_PROPERTY(Qt::MouseButtons supportedButtons READ supportedButtons CONSTANT) - - Q_PROPERTY(bool supportsLeftHanded READ supportsLeftHanded CONSTANT) - Q_PROPERTY(bool leftHandedEnabledByDefault READ leftHandedEnabledByDefault CONSTANT) - Q_PROPERTY(bool leftHanded READ isLeftHanded WRITE setLeftHanded NOTIFY leftHandedChanged) - - Q_PROPERTY(bool supportsDisableEventsOnExternalMouse READ supportsDisableEventsOnExternalMouse CONSTANT) - - Q_PROPERTY(bool supportsDisableWhileTyping READ supportsDisableWhileTyping CONSTANT) - Q_PROPERTY(bool disableWhileTypingEnabledByDefault READ disableWhileTypingEnabledByDefault CONSTANT) - Q_PROPERTY(bool disableWhileTyping READ isDisableWhileTyping WRITE setDisableWhileTyping NOTIFY disableWhileTypingChanged) - - Q_PROPERTY(bool supportsMiddleEmulation READ supportsMiddleEmulation CONSTANT) - Q_PROPERTY(bool middleEmulationEnabledByDefault READ middleEmulationEnabledByDefault CONSTANT) - Q_PROPERTY(bool middleEmulation READ isMiddleEmulation WRITE setMiddleEmulation NOTIFY middleEmulationChanged) - - // - // acceleration speed and profile - Q_PROPERTY(bool supportsPointerAcceleration READ supportsPointerAcceleration CONSTANT) - Q_PROPERTY(qreal pointerAcceleration READ pointerAcceleration WRITE setPointerAcceleration NOTIFY pointerAccelerationChanged) - - Q_PROPERTY(bool supportsPointerAccelerationProfileFlat READ supportsPointerAccelerationProfileFlat CONSTANT) - Q_PROPERTY(bool defaultPointerAccelerationProfileFlat READ defaultPointerAccelerationProfileFlat CONSTANT) - Q_PROPERTY(bool pointerAccelerationProfileFlat READ pointerAccelerationProfileFlat WRITE setPointerAccelerationProfileFlat NOTIFY pointerAccelerationProfileChanged) - - Q_PROPERTY(bool supportsPointerAccelerationProfileAdaptive READ supportsPointerAccelerationProfileAdaptive CONSTANT) - Q_PROPERTY(bool defaultPointerAccelerationProfileAdaptive READ defaultPointerAccelerationProfileAdaptive CONSTANT) - Q_PROPERTY(bool pointerAccelerationProfileAdaptive READ pointerAccelerationProfileAdaptive WRITE setPointerAccelerationProfileAdaptive NOTIFY pointerAccelerationProfileChanged) - - // - // tapping - Q_PROPERTY(int tapFingerCount READ tapFingerCount CONSTANT) - Q_PROPERTY(bool tapToClickEnabledByDefault READ tapToClickEnabledByDefault CONSTANT) - Q_PROPERTY(bool tapToClick READ isTapToClick WRITE setTapToClick NOTIFY tapToClickChanged) - - Q_PROPERTY(bool supportsLmrTapButtonMap READ supportsLmrTapButtonMap CONSTANT) - Q_PROPERTY(bool lmrTapButtonMapEnabledByDefault READ lmrTapButtonMapEnabledByDefault CONSTANT) - Q_PROPERTY(bool lmrTapButtonMap READ lmrTapButtonMap WRITE setLmrTapButtonMap NOTIFY lmrTapButtonMapChanged) - - Q_PROPERTY(bool tapAndDragEnabledByDefault READ tapAndDragEnabledByDefault CONSTANT) - Q_PROPERTY(bool tapAndDrag READ isTapAndDrag WRITE setTapAndDrag NOTIFY tapAndDragChanged) - - Q_PROPERTY(bool tapDragLockEnabledByDefault READ tapDragLockEnabledByDefault CONSTANT) - Q_PROPERTY(bool tapDragLock READ isTapDragLock WRITE setTapDragLock NOTIFY tapDragLockChanged) - - // - // scrolling - Q_PROPERTY(bool supportsNaturalScroll READ supportsNaturalScroll CONSTANT) - Q_PROPERTY(bool naturalScrollEnabledByDefault READ naturalScrollEnabledByDefault CONSTANT) - Q_PROPERTY(bool naturalScroll READ isNaturalScroll WRITE setNaturalScroll NOTIFY naturalScrollChanged) - - Q_PROPERTY(bool supportsScrollTwoFinger READ supportsScrollTwoFinger CONSTANT) - Q_PROPERTY(bool scrollTwoFingerEnabledByDefault READ scrollTwoFingerEnabledByDefault CONSTANT) - Q_PROPERTY(bool scrollTwoFinger READ isScrollTwoFinger WRITE setScrollTwoFinger NOTIFY scrollMethodChanged) - - Q_PROPERTY(bool supportsScrollEdge READ supportsScrollEdge CONSTANT) - Q_PROPERTY(bool scrollEdgeEnabledByDefault READ scrollEdgeEnabledByDefault CONSTANT) - Q_PROPERTY(bool scrollEdge READ isScrollEdge WRITE setScrollEdge NOTIFY scrollMethodChanged) - - Q_PROPERTY(bool supportsScrollOnButtonDown READ supportsScrollOnButtonDown CONSTANT) - Q_PROPERTY(bool scrollOnButtonDownEnabledByDefault READ scrollOnButtonDownEnabledByDefault CONSTANT) - Q_PROPERTY(bool scrollOnButtonDown READ isScrollOnButtonDown WRITE setScrollOnButtonDown NOTIFY scrollMethodChanged) - - Q_PROPERTY(quint32 defaultScrollButton READ defaultScrollButton CONSTANT) - Q_PROPERTY(quint32 scrollButton READ scrollButton WRITE setScrollButton NOTIFY scrollButtonChanged) - - // Click Methods - Q_PROPERTY(bool supportsClickMethodAreas READ supportsClickMethodAreas CONSTANT) - Q_PROPERTY(bool defaultClickMethodAreas READ defaultClickMethodAreas CONSTANT) - Q_PROPERTY(bool clickMethodAreas READ isClickMethodAreas WRITE setClickMethodAreas NOTIFY clickMethodChanged) - - Q_PROPERTY(bool supportsClickMethodClickfinger READ supportsClickMethodClickfinger CONSTANT) - Q_PROPERTY(bool defaultClickMethodClickfinger READ defaultClickMethodClickfinger CONSTANT) - Q_PROPERTY(bool clickMethodClickfinger READ isClickMethodClickfinger WRITE setClickMethodClickfinger NOTIFY clickMethodChanged) - public: KWinWaylandTouchpad(QString dbusName); ~KWinWaylandTouchpad() override; @@ -124,377 +41,97 @@ // // general - QString name() const { + QString name() const override { return m_name.val; } QString sysName() const { return m_sysName.val; } - bool supportsDisableEvents() const { + bool supportsDisableEvents() const override { return m_supportsDisableEvents.val; } - void setEnabled(bool enabled) { + void setEnabled(bool enabled) override { m_enabled.set(enabled); } - bool isEnabled() const { + bool isEnabled() const override { return m_enabled.val; } - Qt::MouseButtons supportedButtons() const { - return m_supportedButtons.val; - } - // // advanced - bool supportsLeftHanded() const { + bool supportsLeftHanded() const override { return m_supportsLeftHanded.val; } - bool leftHandedEnabledByDefault() const { - return m_leftHandedEnabledByDefault.val; - } - bool isLeftHanded() const { - return m_leftHanded.val; - } - void setLeftHanded(bool set) { - m_leftHanded.set(set); - } - - bool supportsDisableEventsOnExternalMouse() const { + bool supportsDisableEventsOnExternalMouse() const override { return m_supportsDisableEventsOnExternalMouse.val; } - - bool supportsDisableWhileTyping() const { + bool supportsDisableWhileTyping() const override { return m_supportsDisableWhileTyping.val; } - bool disableWhileTypingEnabledByDefault() const { - return m_disableWhileTypingEnabledByDefault.val; - } - bool isDisableWhileTyping() const { - return m_disableWhileTyping.val; - } - void setDisableWhileTyping(bool set) { - m_disableWhileTyping.set(set); - } - - bool supportsMiddleEmulation() const { + bool supportsMiddleEmulation() const override { return m_supportsMiddleEmulation.val; } - bool middleEmulationEnabledByDefault() const { - return m_middleEmulationEnabledByDefault.val; - } - bool isMiddleEmulation() const { - return m_middleEmulation.val; - } - void setMiddleEmulation(bool set) { - m_middleEmulation.set(set); - } - // // acceleration speed and profile - bool supportsPointerAcceleration() const { + bool supportsPointerAcceleration() const override { return m_supportsPointerAcceleration.val; } - qreal pointerAcceleration() const { - return m_pointerAcceleration.val; - } - void setPointerAcceleration(qreal acceleration) { - m_pointerAcceleration.set(acceleration); - } - - bool supportsPointerAccelerationProfileFlat() const { + bool supportsPointerAccelerationProfileFlat() const override { return m_supportsPointerAccelerationProfileFlat.val; } - bool defaultPointerAccelerationProfileFlat() const { - return m_defaultPointerAccelerationProfileFlat.val; - } - bool pointerAccelerationProfileFlat() const { - return m_pointerAccelerationProfileFlat.val; - } - void setPointerAccelerationProfileFlat(bool set) { - m_pointerAccelerationProfileFlat.set(set); - } - - bool supportsPointerAccelerationProfileAdaptive() const { + bool supportsPointerAccelerationProfileAdaptive() const override { return m_supportsPointerAccelerationProfileAdaptive.val; } - bool defaultPointerAccelerationProfileAdaptive() const { - return m_defaultPointerAccelerationProfileAdaptive.val; - } - bool pointerAccelerationProfileAdaptive() const { - return m_pointerAccelerationProfileAdaptive.val; - } - void setPointerAccelerationProfileAdaptive(bool set) { - m_pointerAccelerationProfileAdaptive.set(set); - } - - // - // tapping - int tapFingerCount() const { - return m_tapFingerCount.val; - } - bool tapToClickEnabledByDefault() const { - return m_tapToClickEnabledByDefault.val; - } - bool isTapToClick() const { - return m_tapToClick.val; - } - void setTapToClick(bool set) { - m_tapToClick.set(set); - } - - bool supportsLmrTapButtonMap() const { - return m_tapFingerCount.val > 1; - } - bool lmrTapButtonMapEnabledByDefault() const { - return m_lmrTapButtonMapEnabledByDefault.val; - } - bool lmrTapButtonMap() const { - return m_lmrTapButtonMap.val; - } - void setLmrTapButtonMap(bool set) { - m_lmrTapButtonMap.set(set); - } - - bool tapAndDragEnabledByDefault() const { - return m_tapAndDragEnabledByDefault.val; - } - bool isTapAndDrag() const { - return m_tapAndDrag.val; - } - void setTapAndDrag(bool set) { - m_tapAndDrag.set(set); - } - - bool tapDragLockEnabledByDefault() const { - return m_tapDragLockEnabledByDefault.val; - } - bool isTapDragLock() const { - return m_tapDragLock.val; - } - void setTapDragLock(bool set) { - m_tapDragLock.set(set); - } - // // scrolling - bool supportsNaturalScroll() const { + bool supportsNaturalScroll() const override { return m_supportsNaturalScroll.val; } - bool naturalScrollEnabledByDefault() const { - return m_naturalScrollEnabledByDefault.val; - } - bool isNaturalScroll() const { - return m_naturalScroll.val; - } - void setNaturalScroll(bool set) { - m_naturalScroll.set(set); + bool supportsHorizontalScrolling() const override { + return false; } - - bool supportsScrollTwoFinger() const { + bool supportsScrollTwoFinger() const override { return m_supportsScrollTwoFinger.val; } - bool scrollTwoFingerEnabledByDefault() const { - return m_scrollTwoFingerEnabledByDefault.val; - } - bool isScrollTwoFinger() const { - return m_isScrollTwoFinger.val; - } - void setScrollTwoFinger(bool set) { - m_isScrollTwoFinger.set(set); - } - - bool supportsScrollEdge() const { + bool supportsScrollEdge() const override { return m_supportsScrollEdge.val; } - bool scrollEdgeEnabledByDefault() const { - return m_scrollEdgeEnabledByDefault.val; - } - bool isScrollEdge() const { - return m_isScrollEdge.val; - } - void setScrollEdge(bool set) { - m_isScrollEdge.set(set); - } - - bool supportsScrollOnButtonDown() const { + bool supportsScrollOnButtonDown() const override { return m_supportsScrollOnButtonDown.val; } - bool scrollOnButtonDownEnabledByDefault() const { - return m_scrollOnButtonDownEnabledByDefault.val; - } - bool isScrollOnButtonDown() const { - return m_isScrollOnButtonDown.val; - } - void setScrollOnButtonDown(bool set) { - m_isScrollOnButtonDown.set(set); - } - - quint32 defaultScrollButton() const { - return m_defaultScrollButton.val; - } - quint32 scrollButton() const { - return m_scrollButton.val; - } - void setScrollButton(quint32 button) { - m_scrollButton.set(button); - } - - bool supportsClickMethodAreas() const { + // + // Click method + bool supportsClickMethodAreas() const override { return m_supportsClickMethodAreas.val; } - bool defaultClickMethodAreas() const { - return m_defaultClickMethodAreas.val; - } - bool isClickMethodAreas() const { - return m_clickMethodAreas.val; - } - void setClickMethodAreas(bool set) { - m_clickMethodAreas.set(set); - } - - bool supportsClickMethodClickfinger() const { + bool supportsClickMethodClickfinger() const override { return m_supportsClickMethodClickfinger.val; } - bool defaultClickMethodClickfinger() const { - return m_defaultClickMethodClickfinger.val; - } - bool isClickMethodClickfinger() const { - return m_clickMethodClickfinger.val; - } - void setClickMethodClickfinger(bool set) { - m_clickMethodClickfinger.set(set); - } - -Q_SIGNALS: - void leftHandedChanged(); - void pointerAccelerationChanged(); - void pointerAccelerationProfileChanged(); - void enabledChanged(); - void tapToClickChanged(); - void tapAndDragChanged(); - void tapDragLockChanged(); - void lmrTapButtonMapChanged(); - void disableWhileTypingChanged(); - void middleEmulationChanged(); - void naturalScrollChanged(); - void scrollMethodChanged(); - void scrollButtonChanged(); - void clickMethodChanged(); private: - template - struct Prop { - explicit Prop(const QByteArray &dbusName) - : dbus(dbusName) - {} - - void set(T newVal) { - if (avail && val != newVal) { - val = newVal; - } - } - void set(const Prop &p) { - if (avail && val != p.val) { - val = p.val; - } - } - bool changed() const { - return avail && (old != val); - } - - QByteArray dbus; - bool avail; - T old; - T val; - }; template bool valueLoader(Prop &prop); template QString valueWriter(const Prop &prop); - // // general Prop m_name = Prop("name"); Prop m_sysName = Prop("sysName"); - Prop m_supportsDisableEvents = Prop("supportsDisableEvents"); - Prop m_enabled = Prop("enabled"); // // advanced - Prop m_supportedButtons = Prop("supportedButtons"); - Prop m_supportsLeftHanded = Prop("supportsLeftHanded"); - Prop m_leftHandedEnabledByDefault = Prop("leftHandedEnabledByDefault"); - Prop m_leftHanded = Prop("leftHanded"); - - Prop m_supportsDisableEventsOnExternalMouse = Prop("supportsDisableEventsOnExternalMouse"); - Prop m_supportsDisableWhileTyping = Prop("supportsDisableWhileTyping"); - Prop m_disableWhileTypingEnabledByDefault = Prop("disableWhileTypingEnabledByDefault"); - Prop m_disableWhileTyping = Prop("disableWhileTyping"); - Prop m_supportsMiddleEmulation = Prop("supportsMiddleEmulation"); - Prop m_middleEmulationEnabledByDefault = Prop("middleEmulationEnabledByDefault"); - Prop m_middleEmulation = Prop("middleEmulation"); // // acceleration speed and profile Prop m_supportsPointerAcceleration = Prop("supportsPointerAcceleration"); - Prop m_defaultPointerAcceleration = Prop("defaultPointerAcceleration"); - Prop m_pointerAcceleration = Prop("pointerAcceleration"); - - Prop m_supportsPointerAccelerationProfileFlat = Prop("supportsPointerAccelerationProfileFlat"); - Prop m_defaultPointerAccelerationProfileFlat = Prop("defaultPointerAccelerationProfileFlat"); - Prop m_pointerAccelerationProfileFlat = Prop("pointerAccelerationProfileFlat"); - - Prop m_supportsPointerAccelerationProfileAdaptive = Prop("supportsPointerAccelerationProfileAdaptive"); - Prop m_defaultPointerAccelerationProfileAdaptive = Prop("defaultPointerAccelerationProfileAdaptive"); - Prop m_pointerAccelerationProfileAdaptive = Prop("pointerAccelerationProfileAdaptive"); - - // - // tapping - Prop m_tapFingerCount = Prop("tapFingerCount"); - Prop m_tapToClickEnabledByDefault = Prop("tapToClickEnabledByDefault"); - Prop m_tapToClick = Prop("tapToClick"); - - Prop m_lmrTapButtonMapEnabledByDefault = Prop("lmrTapButtonMapEnabledByDefault"); - Prop m_lmrTapButtonMap = Prop("lmrTapButtonMap"); - - Prop m_tapAndDragEnabledByDefault = Prop("tapAndDragEnabledByDefault"); - Prop m_tapAndDrag = Prop("tapAndDrag"); - Prop m_tapDragLockEnabledByDefault = Prop("tapDragLockEnabledByDefault"); - Prop m_tapDragLock = Prop("tapDragLock"); // // scrolling Prop m_supportsNaturalScroll = Prop("supportsNaturalScroll"); - Prop m_naturalScrollEnabledByDefault = Prop("naturalScrollEnabledByDefault"); - Prop m_naturalScroll = Prop("naturalScroll"); - - Prop m_supportsScrollTwoFinger = Prop("supportsScrollTwoFinger"); - Prop m_scrollTwoFingerEnabledByDefault = Prop("scrollTwoFingerEnabledByDefault"); - Prop m_isScrollTwoFinger = Prop("scrollTwoFinger"); - - Prop m_supportsScrollEdge = Prop("supportsScrollEdge"); - Prop m_scrollEdgeEnabledByDefault = Prop("scrollEdgeEnabledByDefault"); - Prop m_isScrollEdge = Prop("scrollEdge"); - - Prop m_supportsScrollOnButtonDown = Prop("supportsScrollOnButtonDown"); - Prop m_scrollOnButtonDownEnabledByDefault = Prop("scrollOnButtonDownEnabledByDefault"); - Prop m_isScrollOnButtonDown = Prop("scrollOnButtonDown"); - - Prop m_defaultScrollButton = Prop("defaultScrollButton"); - Prop m_scrollButton = Prop("scrollButton"); - - Prop m_supportsClickMethodAreas = Prop("supportsClickMethodAreas"); - Prop m_defaultClickMethodAreas = Prop("defaultClickMethodAreas"); - Prop m_clickMethodAreas = Prop("clickMethodAreas"); - - Prop m_supportsClickMethodClickfinger = Prop("supportsClickMethodClickfinger"); - Prop m_defaultClickMethodClickfinger = Prop("defaultClickMethodClickfinger"); - Prop m_clickMethodClickfinger = Prop("clickMethodClickfinger"); - QDBusInterface *m_iface; }; Index: kcms/touchpad/src/backends/kwin_wayland/kwinwaylandtouchpad.cpp =================================================================== --- kcms/touchpad/src/backends/kwin_wayland/kwinwaylandtouchpad.cpp +++ kcms/touchpad/src/backends/kwin_wayland/kwinwaylandtouchpad.cpp @@ -21,33 +21,12 @@ #include #include #include +#include #include "logging.h" -namespace { -template -T valueLoaderPart(QVariant const &reply) { Q_UNUSED(reply); return T(); } - -template<> -bool valueLoaderPart(QVariant const &reply) { return reply.toBool(); } - -template<> -int valueLoaderPart(QVariant const &reply) { return reply.toInt(); } - -template<> -quint32 valueLoaderPart(QVariant const &reply) { return reply.toInt(); } - -template<> -qreal valueLoaderPart(QVariant const &reply) { return reply.toReal(); } - -template<> -QString valueLoaderPart(QVariant const &reply) { return reply.toString(); } - -template<> -Qt::MouseButtons valueLoaderPart(QVariant const &reply) { return static_cast(reply.toInt()); } -} - -KWinWaylandTouchpad::KWinWaylandTouchpad(QString dbusName) +KWinWaylandTouchpad::KWinWaylandTouchpad(QString dbusName) : + LibinputCommon() { m_iface = new QDBusInterface(QStringLiteral("org.kde.KWin"), QStringLiteral("/org/kde/KWin/InputDevice/") + dbusName, @@ -236,7 +215,7 @@ if (!prop.changed()) { return QString(); } - m_iface->setProperty(prop.dbus, prop.val); + m_iface->setProperty(prop.name, prop.val); QDBusError error = m_iface->lastError(); if (error.isValid()) { qCCritical(KCM_TOUCHPAD) << error.message(); @@ -248,9 +227,9 @@ template bool KWinWaylandTouchpad::valueLoader(Prop &prop) { - QVariant reply = m_iface->property(prop.dbus); + QVariant reply = m_iface->property(prop.name); if (!reply.isValid()) { - qCCritical(KCM_TOUCHPAD) << "Error on d-bus read of" << prop.dbus; + qCCritical(KCM_TOUCHPAD) << "Error on d-bus read of" << prop.name; prop.avail = false; return false; } Index: kcms/touchpad/src/backends/libinputcommon.h =================================================================== --- kcms/touchpad/src/backends/libinputcommon.h +++ kcms/touchpad/src/backends/libinputcommon.h @@ -1,38 +1,41 @@ -/* - * Copyright 2017 Roman Gilg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef KWINWAYLANDTOUCHPAD_H -#define KWINWAYLANDTOUCHPAD_H +#ifndef LIBINPUTCOMMON_H +#define LIBINPUTCOMMON_H #include -#include +#include -class QDBusInterface; +namespace { +template +T valueLoaderPart(QVariant const &reply) { Q_UNUSED(reply); return T(); } -class KWinWaylandTouchpad : public QObject +template<> +bool valueLoaderPart(QVariant const &reply) { return reply.toBool(); } + +template<> +int valueLoaderPart(QVariant const &reply) { return reply.toInt(); } + +template<> +quint32 valueLoaderPart(QVariant const &reply) { return reply.toInt(); } + +template<> +qreal valueLoaderPart(QVariant const &reply) { return reply.toReal(); } + +template<> +QString valueLoaderPart(QVariant const &reply) { return reply.toString(); } + +template<> +Qt::MouseButtons valueLoaderPart(QVariant const &reply) { return static_cast(reply.toInt()); } +} + +class LibinputCommon : public QObject { Q_OBJECT // // general - Q_PROPERTY(QString name READ name CONSTANT) - Q_PROPERTY(bool supportsDisableEvents READ supportsDisableEvents CONSTANT) - Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged) + Q_PROPERTY(QString name READ name CONSTANT)// + Q_PROPERTY(bool supportsDisableEvents READ supportsDisableEvents CONSTANT)// + Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged)// // // advanced @@ -87,6 +90,10 @@ Q_PROPERTY(bool naturalScrollEnabledByDefault READ naturalScrollEnabledByDefault CONSTANT) Q_PROPERTY(bool naturalScroll READ isNaturalScroll WRITE setNaturalScroll NOTIFY naturalScrollChanged) + Q_PROPERTY(bool supportsHorizontalScrolling READ supportsHorizontalScrolling CONSTANT) + Q_PROPERTY(bool horizontalScrollingByDefault READ horizontalScrollingByDefault CONSTANT) + Q_PROPERTY(bool horizontalScrolling READ horizontalScrolling WRITE setHorizontalScrolling NOTIFY horizontalScrollingChanged) + Q_PROPERTY(bool supportsScrollTwoFinger READ supportsScrollTwoFinger CONSTANT) Q_PROPERTY(bool scrollTwoFingerEnabledByDefault READ scrollTwoFingerEnabledByDefault CONSTANT) Q_PROPERTY(bool scrollTwoFinger READ isScrollTwoFinger WRITE setScrollTwoFinger NOTIFY scrollMethodChanged) @@ -102,7 +109,7 @@ Q_PROPERTY(quint32 defaultScrollButton READ defaultScrollButton CONSTANT) Q_PROPERTY(quint32 scrollButton READ scrollButton WRITE setScrollButton NOTIFY scrollButtonChanged) - // Click Methods + // Click Methods Q_PROPERTY(bool supportsClickMethodAreas READ supportsClickMethodAreas CONSTANT) Q_PROPERTY(bool defaultClickMethodAreas READ defaultClickMethodAreas CONSTANT) Q_PROPERTY(bool clickMethodAreas READ isClickMethodAreas WRITE setClickMethodAreas NOTIFY clickMethodChanged) @@ -112,42 +119,22 @@ Q_PROPERTY(bool clickMethodClickfinger READ isClickMethodClickfinger WRITE setClickMethodClickfinger NOTIFY clickMethodChanged) public: - KWinWaylandTouchpad(QString dbusName); - ~KWinWaylandTouchpad() override; - bool init(); + LibinputCommon() {} + virtual ~LibinputCommon() {} - bool getConfig(); - bool getDefaultConfig(); - bool applyConfig(); - bool isChangedConfig() const; + virtual QString name() const = 0; + virtual bool supportsDisableEvents() const = 0; + virtual bool isEnabled() const = 0; + virtual void setEnabled(bool set) = 0; // - // general - QString name() const { - return m_name.val; - } - QString sysName() const { - return m_sysName.val; - } - bool supportsDisableEvents() const { - return m_supportsDisableEvents.val; - } - void setEnabled(bool enabled) { - m_enabled.set(enabled); - } - bool isEnabled() const { - return m_enabled.val; - } + // advanced Qt::MouseButtons supportedButtons() const { return m_supportedButtons.val; } - // - // advanced - bool supportsLeftHanded() const { - return m_supportsLeftHanded.val; - } + virtual bool supportsLeftHanded() const = 0; bool leftHandedEnabledByDefault() const { return m_leftHandedEnabledByDefault.val; } @@ -158,13 +145,9 @@ m_leftHanded.set(set); } - bool supportsDisableEventsOnExternalMouse() const { - return m_supportsDisableEventsOnExternalMouse.val; - } + virtual bool supportsDisableEventsOnExternalMouse() const = 0; - bool supportsDisableWhileTyping() const { - return m_supportsDisableWhileTyping.val; - } + virtual bool supportsDisableWhileTyping() const = 0; bool disableWhileTypingEnabledByDefault() const { return m_disableWhileTypingEnabledByDefault.val; } @@ -175,9 +158,7 @@ m_disableWhileTyping.set(set); } - bool supportsMiddleEmulation() const { - return m_supportsMiddleEmulation.val; - } + virtual bool supportsMiddleEmulation() const = 0; bool middleEmulationEnabledByDefault() const { return m_middleEmulationEnabledByDefault.val; } @@ -188,21 +169,15 @@ m_middleEmulation.set(set); } - // - // acceleration speed and profile - bool supportsPointerAcceleration() const { - return m_supportsPointerAcceleration.val; - } + virtual bool supportsPointerAcceleration() const = 0; qreal pointerAcceleration() const { return m_pointerAcceleration.val; } void setPointerAcceleration(qreal acceleration) { m_pointerAcceleration.set(acceleration); } - bool supportsPointerAccelerationProfileFlat() const { - return m_supportsPointerAccelerationProfileFlat.val; - } + virtual bool supportsPointerAccelerationProfileFlat() const = 0; bool defaultPointerAccelerationProfileFlat() const { return m_defaultPointerAccelerationProfileFlat.val; } @@ -213,9 +188,7 @@ m_pointerAccelerationProfileFlat.set(set); } - bool supportsPointerAccelerationProfileAdaptive() const { - return m_supportsPointerAccelerationProfileAdaptive.val; - } + virtual bool supportsPointerAccelerationProfileAdaptive() const = 0; bool defaultPointerAccelerationProfileAdaptive() const { return m_defaultPointerAccelerationProfileAdaptive.val; } @@ -226,59 +199,9 @@ m_pointerAccelerationProfileAdaptive.set(set); } - // - // tapping - int tapFingerCount() const { - return m_tapFingerCount.val; - } - bool tapToClickEnabledByDefault() const { - return m_tapToClickEnabledByDefault.val; - } - bool isTapToClick() const { - return m_tapToClick.val; - } - void setTapToClick(bool set) { - m_tapToClick.set(set); - } - - bool supportsLmrTapButtonMap() const { - return m_tapFingerCount.val > 1; - } - bool lmrTapButtonMapEnabledByDefault() const { - return m_lmrTapButtonMapEnabledByDefault.val; - } - bool lmrTapButtonMap() const { - return m_lmrTapButtonMap.val; - } - void setLmrTapButtonMap(bool set) { - m_lmrTapButtonMap.set(set); - } - - bool tapAndDragEnabledByDefault() const { - return m_tapAndDragEnabledByDefault.val; - } - bool isTapAndDrag() const { - return m_tapAndDrag.val; - } - void setTapAndDrag(bool set) { - m_tapAndDrag.set(set); - } - - bool tapDragLockEnabledByDefault() const { - return m_tapDragLockEnabledByDefault.val; - } - bool isTapDragLock() const { - return m_tapDragLock.val; - } - void setTapDragLock(bool set) { - m_tapDragLock.set(set); - } - // // scrolling - bool supportsNaturalScroll() const { - return m_supportsNaturalScroll.val; - } + virtual bool supportsNaturalScroll() const = 0; bool naturalScrollEnabledByDefault() const { return m_naturalScrollEnabledByDefault.val; } @@ -289,9 +212,18 @@ m_naturalScroll.set(set); } - bool supportsScrollTwoFinger() const { - return m_supportsScrollTwoFinger.val; + virtual bool supportsHorizontalScrolling() const = 0; + bool horizontalScrollingByDefault() const { + return true; + } + bool horizontalScrolling() const { + return m_horizontalScrolling.val; + } + void setHorizontalScrolling(bool set) { + m_horizontalScrolling.set(set); } + + virtual bool supportsScrollTwoFinger() const = 0; bool scrollTwoFingerEnabledByDefault() const { return m_scrollTwoFingerEnabledByDefault.val; } @@ -302,9 +234,7 @@ m_isScrollTwoFinger.set(set); } - bool supportsScrollEdge() const { - return m_supportsScrollEdge.val; - } + virtual bool supportsScrollEdge() const = 0; bool scrollEdgeEnabledByDefault() const { return m_scrollEdgeEnabledByDefault.val; } @@ -315,9 +245,7 @@ m_isScrollEdge.set(set); } - bool supportsScrollOnButtonDown() const { - return m_supportsScrollOnButtonDown.val; - } + virtual bool supportsScrollOnButtonDown() const = 0; bool scrollOnButtonDownEnabledByDefault() const { return m_scrollOnButtonDownEnabledByDefault.val; } @@ -337,10 +265,58 @@ void setScrollButton(quint32 button) { m_scrollButton.set(button); } - - bool supportsClickMethodAreas() const { - return m_supportsClickMethodAreas.val; + + // + // tapping + int tapFingerCount() const { + return m_tapFingerCount.val; + } + bool tapToClickEnabledByDefault() const { + return m_tapToClickEnabledByDefault.val; + } + bool isTapToClick() const { + return m_tapToClick.val; + } + void setTapToClick(bool set) { + m_tapToClick.set(set); + } + + bool supportsLmrTapButtonMap() const { + return m_tapFingerCount.val > 1; + } + bool lmrTapButtonMapEnabledByDefault() const { + return m_lmrTapButtonMapEnabledByDefault.val; + } + bool lmrTapButtonMap() const { + return m_lmrTapButtonMap.val; } + void setLmrTapButtonMap(bool set) { + m_lmrTapButtonMap.set(set); + } + + bool tapAndDragEnabledByDefault() const { + return m_tapAndDragEnabledByDefault.val; + } + bool isTapAndDrag() const { + return m_tapAndDrag.val; + } + void setTapAndDrag(bool set) { + m_tapAndDrag.set(set); + } + + bool tapDragLockEnabledByDefault() const { + return m_tapDragLockEnabledByDefault.val; + } + bool isTapDragLock() const { + return m_tapDragLock.val; + } + void setTapDragLock(bool set) { + m_tapDragLock.set(set); + } + + // + // click method + virtual bool supportsClickMethodAreas() const = 0; bool defaultClickMethodAreas() const { return m_defaultClickMethodAreas.val; } @@ -351,9 +327,7 @@ m_clickMethodAreas.set(set); } - bool supportsClickMethodClickfinger() const { - return m_supportsClickMethodClickfinger.val; - } + virtual bool supportsClickMethodClickfinger() const = 0; bool defaultClickMethodClickfinger() const { return m_defaultClickMethodClickfinger.val; } @@ -365,26 +339,32 @@ } Q_SIGNALS: - void leftHandedChanged(); - void pointerAccelerationChanged(); - void pointerAccelerationProfileChanged(); void enabledChanged(); + // Tapping void tapToClickChanged(); + void lmrTapButtonMapChanged(); void tapAndDragChanged(); void tapDragLockChanged(); - void lmrTapButtonMapChanged(); + // Advanced + void leftHandedChanged(); void disableWhileTypingChanged(); void middleEmulationChanged(); + // acceleration speed and profile + void pointerAccelerationChanged(); + void pointerAccelerationProfileChanged(); + // scrolling void naturalScrollChanged(); + void horizontalScrollingChanged(); void scrollMethodChanged(); void scrollButtonChanged(); + // click methods void clickMethodChanged(); -private: +protected: template struct Prop { - explicit Prop(const QByteArray &dbusName) - : dbus(dbusName) + explicit Prop(const QByteArray &name) + : name(name) {} void set(T newVal) { @@ -401,46 +381,37 @@ return avail && (old != val); } - QByteArray dbus; + // In wayland, name will be dbus name + QByteArray name; bool avail; T old; T val; }; - template - bool valueLoader(Prop &prop); - template - QString valueWriter(const Prop &prop); // // general - Prop m_name = Prop("name"); - Prop m_sysName = Prop("sysName"); Prop m_supportsDisableEvents = Prop("supportsDisableEvents"); Prop m_enabled = Prop("enabled"); // // advanced Prop m_supportedButtons = Prop("supportedButtons"); - Prop m_supportsLeftHanded = Prop("supportsLeftHanded"); Prop m_leftHandedEnabledByDefault = Prop("leftHandedEnabledByDefault"); Prop m_leftHanded = Prop("leftHanded"); Prop m_supportsDisableEventsOnExternalMouse = Prop("supportsDisableEventsOnExternalMouse"); - Prop m_supportsDisableWhileTyping = Prop("supportsDisableWhileTyping"); Prop m_disableWhileTypingEnabledByDefault = Prop("disableWhileTypingEnabledByDefault"); Prop m_disableWhileTyping = Prop("disableWhileTyping"); - Prop m_supportsMiddleEmulation = Prop("supportsMiddleEmulation"); Prop m_middleEmulationEnabledByDefault = Prop("middleEmulationEnabledByDefault"); Prop m_middleEmulation = Prop("middleEmulation"); // // acceleration speed and profile - Prop m_supportsPointerAcceleration = Prop("supportsPointerAcceleration"); Prop m_defaultPointerAcceleration = Prop("defaultPointerAcceleration"); Prop m_pointerAcceleration = Prop("pointerAcceleration"); @@ -468,10 +439,11 @@ // // scrolling - Prop m_supportsNaturalScroll = Prop("supportsNaturalScroll"); Prop m_naturalScrollEnabledByDefault = Prop("naturalScrollEnabledByDefault"); Prop m_naturalScroll = Prop("naturalScroll"); + Prop m_horizontalScrolling = Prop("horizontalScrolling"); + Prop m_supportsScrollTwoFinger = Prop("supportsScrollTwoFinger"); Prop m_scrollTwoFingerEnabledByDefault = Prop("scrollTwoFingerEnabledByDefault"); Prop m_isScrollTwoFinger = Prop("scrollTwoFinger"); @@ -487,16 +459,14 @@ Prop m_defaultScrollButton = Prop("defaultScrollButton"); Prop m_scrollButton = Prop("scrollButton"); + // Click Method Prop m_supportsClickMethodAreas = Prop("supportsClickMethodAreas"); Prop m_defaultClickMethodAreas = Prop("defaultClickMethodAreas"); Prop m_clickMethodAreas = Prop("clickMethodAreas"); Prop m_supportsClickMethodClickfinger = Prop("supportsClickMethodClickfinger"); Prop m_defaultClickMethodClickfinger = Prop("defaultClickMethodClickfinger"); Prop m_clickMethodClickfinger = Prop("clickMethodClickfinger"); - - - QDBusInterface *m_iface; }; -#endif +#endif // LIBINPUTCOMMON_H Index: kcms/touchpad/src/backends/libinputcommon.cpp =================================================================== --- /dev/null +++ kcms/touchpad/src/backends/libinputcommon.cpp @@ -0,0 +1,4 @@ +#include "libinputcommon.h" + + +#include "moc_libinputcommon.cpp" Index: kcms/touchpad/src/backends/x11.cmake =================================================================== --- kcms/touchpad/src/backends/x11.cmake +++ kcms/touchpad/src/backends/x11.cmake @@ -16,6 +16,7 @@ SET(backend_SRCS ${backend_SRCS} + backends/libinputcommon.cpp backends/x11/propertyinfo.cpp backends/x11/xlibbackend.cpp backends/x11/synapticstouchpad.cpp Index: kcms/touchpad/src/backends/x11/libinputtouchpad.h =================================================================== --- kcms/touchpad/src/backends/x11/libinputtouchpad.h +++ kcms/touchpad/src/backends/x11/libinputtouchpad.h @@ -19,471 +19,105 @@ #ifndef LIBINPUTTOUCHPAD_H #define LIBINPUTTOUCHPAD_H +#include + #include "xlibtouchpad.h" +#include "backends/libinputcommon.h" -class LibinputTouchpad : public XlibTouchpad +class LibinputTouchpad : public LibinputCommon, public XlibTouchpad { Q_OBJECT - // - // general - Q_PROPERTY(QString name READ name CONSTANT) - Q_PROPERTY(bool supportsDisableEvents READ supportsDisableEvents CONSTANT) - Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged) - // - // advanced - Q_PROPERTY(Qt::MouseButtons supportedButtons READ supportedButtons CONSTANT) - - Q_PROPERTY(bool supportsLeftHanded READ supportsLeftHanded CONSTANT) - Q_PROPERTY(bool leftHandedEnabledByDefault READ leftHandedEnabledByDefault CONSTANT) - Q_PROPERTY(bool leftHanded READ isLeftHanded WRITE setLeftHanded NOTIFY leftHandedChanged) - - Q_PROPERTY(bool supportsDisableEventsOnExternalMouse READ supportsDisableEventsOnExternalMouse CONSTANT) - - Q_PROPERTY(bool supportsDisableWhileTyping READ supportsDisableWhileTyping CONSTANT) - Q_PROPERTY(bool disableWhileTypingEnabledByDefault READ disableWhileTypingEnabledByDefault CONSTANT) - Q_PROPERTY(bool disableWhileTyping READ isDisableWhileTyping WRITE setDisableWhileTyping NOTIFY disableWhileTypingChanged) - - Q_PROPERTY(bool supportsMiddleEmulation READ supportsMiddleEmulation CONSTANT) - Q_PROPERTY(bool middleEmulationEnabledByDefault READ middleEmulationEnabledByDefault CONSTANT) - Q_PROPERTY(bool middleEmulation READ isMiddleEmulation WRITE setMiddleEmulation NOTIFY middleEmulationChanged) - - // - // acceleration speed and profile - Q_PROPERTY(bool supportsPointerAcceleration READ supportsPointerAcceleration CONSTANT) - Q_PROPERTY(qreal pointerAcceleration READ pointerAcceleration WRITE setPointerAcceleration NOTIFY pointerAccelerationChanged) - - Q_PROPERTY(bool supportsPointerAccelerationProfileFlat READ supportsPointerAccelerationProfileFlat CONSTANT) - Q_PROPERTY(bool defaultPointerAccelerationProfileFlat READ defaultPointerAccelerationProfileFlat CONSTANT) - Q_PROPERTY(bool pointerAccelerationProfileFlat READ pointerAccelerationProfileFlat WRITE setPointerAccelerationProfileFlat NOTIFY pointerAccelerationProfileChanged) - - Q_PROPERTY(bool supportsPointerAccelerationProfileAdaptive READ supportsPointerAccelerationProfileAdaptive CONSTANT) - Q_PROPERTY(bool defaultPointerAccelerationProfileAdaptive READ defaultPointerAccelerationProfileAdaptive CONSTANT) - Q_PROPERTY(bool pointerAccelerationProfileAdaptive READ pointerAccelerationProfileAdaptive WRITE setPointerAccelerationProfileAdaptive NOTIFY pointerAccelerationProfileChanged) - - // - // scrolling - Q_PROPERTY(bool supportsNaturalScroll READ supportsNaturalScroll CONSTANT) - Q_PROPERTY(bool naturalScrollEnabledByDefault READ naturalScrollEnabledByDefault CONSTANT) - Q_PROPERTY(bool naturalScroll READ isNaturalScroll WRITE setNaturalScroll NOTIFY naturalScrollChanged) - - Q_PROPERTY(bool supportsScrollTwoFinger READ supportsScrollTwoFinger CONSTANT) - Q_PROPERTY(bool scrollTwoFingerEnabledByDefault READ scrollTwoFingerEnabledByDefault CONSTANT) - Q_PROPERTY(bool scrollTwoFinger READ isScrollTwoFinger WRITE setScrollTwoFinger NOTIFY scrollMethodChanged) - - Q_PROPERTY(bool supportsScrollEdge READ supportsScrollEdge CONSTANT) - Q_PROPERTY(bool scrollEdgeEnabledByDefault READ scrollEdgeEnabledByDefault CONSTANT) - Q_PROPERTY(bool scrollEdge READ isScrollEdge WRITE setScrollEdge NOTIFY scrollMethodChanged) - - Q_PROPERTY(bool supportsScrollOnButtonDown READ supportsScrollOnButtonDown CONSTANT) - Q_PROPERTY(bool scrollOnButtonDownEnabledByDefault READ scrollOnButtonDownEnabledByDefault CONSTANT) - Q_PROPERTY(bool scrollOnButtonDown READ isScrollOnButtonDown WRITE setScrollOnButtonDown NOTIFY scrollMethodChanged) - - Q_PROPERTY(quint32 defaultScrollButton READ defaultScrollButton CONSTANT) - Q_PROPERTY(quint32 scrollButton READ scrollButton WRITE setScrollButton NOTIFY scrollButtonChanged) - - // - // tapping - Q_PROPERTY(int tapFingerCount READ tapFingerCount CONSTANT) - Q_PROPERTY(bool tapToClickEnabledByDefault READ tapToClickEnabledByDefault CONSTANT) - Q_PROPERTY(bool tapToClick READ isTapToClick WRITE setTapToClick NOTIFY tapToClickChanged) - - Q_PROPERTY(bool supportsLmrTapButtonMap READ supportsLmrTapButtonMap CONSTANT) - Q_PROPERTY(bool lmrTapButtonMapEnabledByDefault READ lmrTapButtonMapEnabledByDefault CONSTANT) - Q_PROPERTY(bool lmrTapButtonMap READ lmrTapButtonMap WRITE setLmrTapButtonMap NOTIFY lmrTapButtonMapChanged) - - Q_PROPERTY(bool tapAndDragEnabledByDefault READ tapAndDragEnabledByDefault CONSTANT) - Q_PROPERTY(bool tapAndDrag READ isTapAndDrag WRITE setTapAndDrag NOTIFY tapAndDragChanged) - - Q_PROPERTY(bool tapDragLockEnabledByDefault READ tapDragLockEnabledByDefault CONSTANT) - Q_PROPERTY(bool tapDragLock READ isTapDragLock WRITE setTapDragLock NOTIFY tapDragLockChanged) - - // Click Methods - Q_PROPERTY(bool supportsClickMethodAreas READ supportsClickMethodAreas CONSTANT) - Q_PROPERTY(bool defaultClickMethodAreas READ defaultClickMethodAreas CONSTANT) - Q_PROPERTY(bool clickMethodAreas READ isClickMethodAreas WRITE setClickMethodAreas NOTIFY clickMethodChanged) - - Q_PROPERTY(bool supportsClickMethodClickfinger READ supportsClickMethodClickfinger CONSTANT) - Q_PROPERTY(bool defaultClickMethodClickfinger READ defaultClickMethodClickfinger CONSTANT) - Q_PROPERTY(bool clickMethodClickfinger READ isClickMethodClickfinger WRITE setClickMethodClickfinger NOTIFY clickMethodChanged) public: LibinputTouchpad(Display *display, int deviceId); + ~LibinputTouchpad() override {} + bool getConfig() override; bool applyConfig() override; bool getDefaultConfig() override; bool isChangedConfig() override; +private: + + template + bool valueLoader(Prop &prop); + + template + QString valueWriter(const Prop &prop); + // // general - QString name() { + QString name() const override { return m_name; } - bool supportsDisableEvents() { + bool supportsDisableEvents() const override { return m_supportsDisableEvents.avail ? m_supportsDisableEvents.val : false; } - bool enabled() { + bool isEnabled() const override { return !m_enabled.val; } - void setEnabled(bool set) { + void setEnabled(bool set) override { m_enabled.set(!set); } // // advanced - Qt::MouseButtons supportedButtons() const { - return m_supportedButtons.val; - } - bool supportsLeftHanded() const { + bool supportsLeftHanded() const override { return m_leftHanded.avail; } - bool leftHandedEnabledByDefault() const { - return m_leftHandedEnabledByDefault.val; - } - bool isLeftHanded() const { - return m_leftHanded.val; - } - void setLeftHanded(bool set) { - m_leftHanded.set(set); - } - - bool supportsDisableEventsOnExternalMouse() const { + bool supportsDisableEventsOnExternalMouse() const override { return m_supportsDisableEventsOnExternalMouse.avail ? m_supportsDisableEventsOnExternalMouse.val : false; } - - bool supportsDisableWhileTyping() const { + bool supportsDisableWhileTyping() const override { return m_disableWhileTyping.avail; } - bool disableWhileTypingEnabledByDefault() const { - return m_disableWhileTypingEnabledByDefault.val; - } - bool isDisableWhileTyping() const { - return m_disableWhileTyping.val; - } - void setDisableWhileTyping(bool set) { - m_disableWhileTyping.set(set); - } - - bool supportsMiddleEmulation() const { + bool supportsMiddleEmulation() const override { return m_middleEmulation.avail; } - bool middleEmulationEnabledByDefault() const { - return m_middleEmulationEnabledByDefault.val; - } - bool isMiddleEmulation() const { - return m_middleEmulation.val; - } - void setMiddleEmulation(bool set) { - m_middleEmulation.set(set); - } - // // acceleration speed and profile - bool supportsPointerAcceleration() const { + bool supportsPointerAcceleration() const override { return m_pointerAcceleration.avail; } - qreal pointerAcceleration() const { - return m_pointerAcceleration.val; - } - void setPointerAcceleration(qreal acceleration) { - m_pointerAcceleration.set(acceleration); - } - - bool supportsPointerAccelerationProfileFlat() const { + bool supportsPointerAccelerationProfileFlat() const override { return m_supportsPointerAccelerationProfileFlat.avail ? m_supportsPointerAccelerationProfileFlat.val : false; } - bool defaultPointerAccelerationProfileFlat() const { - return m_defaultPointerAccelerationProfileFlat.val; - } - bool pointerAccelerationProfileFlat() const { - return m_pointerAccelerationProfileFlat.val; - } - void setPointerAccelerationProfileFlat(bool set) { - m_pointerAccelerationProfileFlat.set(set); - } - - bool supportsPointerAccelerationProfileAdaptive() const { + bool supportsPointerAccelerationProfileAdaptive() const override { return m_supportsPointerAccelerationProfileAdaptive.avail ? m_supportsPointerAccelerationProfileAdaptive.val : false; } - bool defaultPointerAccelerationProfileAdaptive() const { - return m_defaultPointerAccelerationProfileAdaptive.val; - } - bool pointerAccelerationProfileAdaptive() const { - return m_pointerAccelerationProfileAdaptive.val; - } - void setPointerAccelerationProfileAdaptive(bool set) { - m_pointerAccelerationProfileAdaptive.set(set); - } - // // scrolling - bool supportsNaturalScroll() const { + bool supportsNaturalScroll() const override { return m_naturalScroll.avail; } - bool naturalScrollEnabledByDefault() const { - return m_naturalScrollEnabledByDefault.val; - } - bool isNaturalScroll() const { - return m_naturalScroll.val; + bool supportsHorizontalScrolling() const override { + return true; } - void setNaturalScroll(bool set) { - m_naturalScroll.set(set); - } - - bool supportsScrollTwoFinger() const { + bool supportsScrollTwoFinger() const override { return m_supportsScrollTwoFinger.avail ? m_supportsScrollTwoFinger.val : false; } - bool scrollTwoFingerEnabledByDefault() const { - return m_scrollTwoFingerEnabledByDefault.val; - } - bool isScrollTwoFinger() const { - return m_isScrollTwoFinger.val; - } - void setScrollTwoFinger(bool set) { - m_isScrollTwoFinger.set(set); - } - - bool supportsScrollEdge() const { + bool supportsScrollEdge() const override { return m_supportsScrollEdge.avail ? m_supportsScrollEdge.val : false; } - bool scrollEdgeEnabledByDefault() const { - return m_scrollEdgeEnabledByDefault.val; - } - bool isScrollEdge() const { - return m_isScrollEdge.val; - } - void setScrollEdge(bool set) { - m_isScrollEdge.set(set); - } - - bool supportsScrollOnButtonDown() const { + bool supportsScrollOnButtonDown() const override { return m_supportsScrollOnButtonDown.avail ? m_supportsScrollOnButtonDown.val : false; } - bool scrollOnButtonDownEnabledByDefault() const { - return m_scrollOnButtonDownEnabledByDefault.val; - } - bool isScrollOnButtonDown() const { - return m_isScrollOnButtonDown.val; - } - void setScrollOnButtonDown(bool set) { - m_isScrollOnButtonDown.set(set); - } - - quint32 defaultScrollButton() const { - return m_defaultScrollButton.val; - } - quint32 scrollButton() const { - return m_scrollButton.val; - } - void setScrollButton(quint32 button) { - m_scrollButton.set(button); - } - // - // tapping - int tapFingerCount() const { - return m_tapFingerCount.val; - } - bool tapToClickEnabledByDefault() const { - return m_tapToClickEnabledByDefault.val; - } - bool isTapToClick() const { - return m_tapToClick.val; - } - void setTapToClick(bool set) { - m_tapToClick.set(set); - } - - bool supportsLmrTapButtonMap() const { - return m_tapFingerCount.val > 1; - } - bool lmrTapButtonMapEnabledByDefault() const { - return m_lmrTapButtonMapEnabledByDefault.val; - } - bool lmrTapButtonMap() const { - return m_lmrTapButtonMap.val; - } - void setLmrTapButtonMap(bool set) { - m_lmrTapButtonMap.set(set); - } - - bool tapAndDragEnabledByDefault() const { - return m_tapAndDragEnabledByDefault.val; - } - bool isTapAndDrag() const { - return m_tapAndDrag.val; - } - void setTapAndDrag(bool set) { - m_tapAndDrag.set(set); - } - - bool tapDragLockEnabledByDefault() const { - return m_tapDragLockEnabledByDefault.val; - } - bool isTapDragLock() const { - return m_tapDragLock.val; - } - void setTapDragLock(bool set) { - m_tapDragLock.set(set); - } - - bool supportsClickMethodAreas() const { + // click method + bool supportsClickMethodAreas() const override { return m_supportsClickMethodAreas.avail ? m_supportsClickMethodAreas.val : false; } - bool defaultClickMethodAreas() const { - return m_defaultClickMethodAreas.val; - } - bool isClickMethodAreas() const { - return m_clickMethodAreas.val; - } - void setClickMethodAreas(bool set) { - m_clickMethodAreas.set(set); - } - - bool supportsClickMethodClickfinger() const { + bool supportsClickMethodClickfinger() const override { return m_supportsClickMethodClickfinger.avail ? m_supportsClickMethodClickfinger.val : false; } - bool defaultClickMethodClickfinger() const { - return m_defaultClickMethodClickfinger.val; - } - bool isClickMethodClickfinger() const { - return m_clickMethodClickfinger.val; - } - void setClickMethodClickfinger(bool set) { - m_clickMethodClickfinger.set(set); - } - -Q_SIGNALS: - void enabledChanged(); - // Tapping - void tapToClickChanged(); - void lmrTapButtonMapChanged(); - void tapAndDragChanged(); - void tapDragLockChanged(); - // Advanced - void leftHandedChanged(); - void disableWhileTypingChanged(); - void middleEmulationChanged(); - // acceleration speed and profile - void pointerAccelerationChanged(); - void pointerAccelerationProfileChanged(); - // scrolling - void naturalScrollChanged(); - void scrollMethodChanged(); - void scrollButtonChanged(); - // click methods - void clickMethodChanged(); private: - template - struct Prop { - explicit Prop(const QByteArray &_name) - : name(_name) - {} - - void set(T newVal) { - if (avail && val != newVal) { - val = newVal; - } - } - void set(const Prop &p) { - if (avail && val != p.val) { - val = p.val; - } - } - bool changed() const { - return avail && (old != val); - } - - QByteArray name; - bool avail; - T old; - T val; - }; - - template - bool valueLoader(Prop &prop); - - template - QString valueWriter(const Prop &prop); - - // // general - Prop m_supportsDisableEvents = Prop("SupportsDisableEvents"); - Prop m_enabled = Prop("Enabled"); - Prop m_enabledDefault = Prop("EnabledDefault"); + Prop m_enabledDefault = Prop("enabledDefault"); // // advanced - Prop m_supportedButtons = Prop("SupportedButtons"); - - Prop m_leftHandedEnabledByDefault = Prop("LeftHandedEnabledByDefault"); - Prop m_leftHanded = Prop("LeftHanded"); - - Prop m_supportsDisableEventsOnExternalMouse = Prop("SupportsDisableEventsOnExternalMouse"); - Prop m_disableEventsOnExternalMouse = Prop("DisableEventsOnExternalMouse"); - Prop m_disableEventsOnExternalMouseDefault = Prop("DisableEventsOnExternalMouseDefault"); - - Prop m_disableWhileTypingEnabledByDefault = Prop("DisableWhileTypingEnabledByDefault"); - Prop m_disableWhileTyping = Prop("DisableWhileTyping"); - - Prop m_middleEmulationEnabledByDefault = Prop("MiddleEmulationEnabledByDefault"); - Prop m_middleEmulation = Prop("MiddleEmulation"); - - // - // acceleration speed and profile - Prop m_defaultPointerAcceleration = Prop("DefaultPointerAcceleration"); - Prop m_pointerAcceleration = Prop("PointerAcceleration"); - - Prop m_supportsPointerAccelerationProfileFlat = Prop("SupportsPointerAccelerationProfileFlat"); - Prop m_defaultPointerAccelerationProfileFlat = Prop("DefaultPointerAccelerationProfileFlat"); - Prop m_pointerAccelerationProfileFlat = Prop("PointerAccelerationProfileFlat"); - - Prop m_supportsPointerAccelerationProfileAdaptive = Prop("SupportsPointerAccelerationProfileAdaptive"); - Prop m_defaultPointerAccelerationProfileAdaptive = Prop("DefaultPointerAccelerationProfileAdaptive"); - Prop m_pointerAccelerationProfileAdaptive = Prop("PointerAccelerationProfileAdaptive"); - - // - // scrolling - Prop m_naturalScrollEnabledByDefault = Prop("NaturalScrollEnabledByDefault"); - Prop m_naturalScroll = Prop("NaturalScroll"); - - Prop m_supportsScrollTwoFinger = Prop("SupportsScrollTwoFinger"); - Prop m_scrollTwoFingerEnabledByDefault = Prop("ScrollTwoFingerEnabledByDefault"); - Prop m_isScrollTwoFinger = Prop("ScrollTwoFinger"); - - Prop m_supportsScrollEdge = Prop("SupportsScrollEdge"); - Prop m_scrollEdgeEnabledByDefault = Prop("ScrollEdgeEnabledByDefault"); - Prop m_isScrollEdge = Prop("ScrollEdge"); - - Prop m_supportsScrollOnButtonDown = Prop("SupportsScrollOnButtonDown"); - Prop m_scrollOnButtonDownEnabledByDefault = Prop("ScrollOnButtonDownEnabledByDefault"); - Prop m_isScrollOnButtonDown = Prop("ScrollOnButtonDown"); - - Prop m_defaultScrollButton = Prop("DefaultScrollButton"); - Prop m_scrollButton = Prop("ScrollButton"); - - // - // tapping - Prop m_tapFingerCount = Prop("TapFingerCount"); - Prop m_tapToClickEnabledByDefault = Prop("TapToClickEnabledByDefault"); - Prop m_tapToClick = Prop("Tapping"); - - Prop m_lmrTapButtonMapEnabledByDefault = Prop("LmrTapButtonMapEnabledByDefault"); - Prop m_lmrTapButtonMap = Prop("LmrTapButtonMap"); - - Prop m_tapAndDragEnabledByDefault = Prop("TapAndDragEnabledByDefault"); - Prop m_tapAndDrag = Prop("TapAndDrag"); - Prop m_tapDragLockEnabledByDefault = Prop("TapDragLockEnabledByDefault"); - Prop m_tapDragLock = Prop("TapDragLock"); - - // Click Method - Prop m_supportsClickMethodAreas = Prop("SupportsClickMethodAreas"); - Prop m_defaultClickMethodAreas = Prop("DefaultClickMethodAreas"); - Prop m_clickMethodAreas = Prop("ClickMethodAreas"); - - Prop m_supportsClickMethodClickfinger = Prop("SupportsClickMethodClickfinger"); - Prop m_defaultClickMethodClickfinger = Prop("DefaultClickMethodClickfinger"); - Prop m_clickMethodClickfinger = Prop("ClickMethodClickfinger"); - + Prop m_disableEventsOnExternalMouse = Prop("disableEventsOnExternalMouse"); + Prop m_disableEventsOnExternalMouseDefault = Prop("disableEventsOnExternalMouseDefault"); QString m_name; }; Index: kcms/touchpad/src/backends/x11/libinputtouchpad.cpp =================================================================== --- kcms/touchpad/src/backends/x11/libinputtouchpad.cpp +++ kcms/touchpad/src/backends/x11/libinputtouchpad.cpp @@ -28,112 +28,92 @@ #include #include "logging.h" -namespace { -template -T valueLoaderPart(QVariant const &reply) { Q_UNUSED(reply); return T(); } - -template<> -bool valueLoaderPart(QVariant const &reply) { return reply.toBool(); } - -template<> -int valueLoaderPart(QVariant const &reply) { return reply.toInt(); } - -template<> -quint32 valueLoaderPart(QVariant const &reply) { return reply.toInt(); } - -template<> -qreal valueLoaderPart(QVariant const &reply) { return reply.toReal(); } - -template<> -QString valueLoaderPart(QVariant const &reply) { return reply.toString(); } - -template<> -Qt::MouseButtons valueLoaderPart(QVariant const &reply) { return static_cast(reply.toInt()); } -} - const struct Parameter libinputProperties[] = { /* libinput disable supports property */ - {"SupportsDisableEvents", PT_INT, 0, 1, LIBINPUT_PROP_SENDEVENTS_AVAILABLE, 8, 0}, - {"Enabled", PT_INT, 0, 1, LIBINPUT_PROP_SENDEVENTS_ENABLED, 8, 0}, - {"EnabledDefault", PT_INT, 0, 1, LIBINPUT_PROP_SENDEVENTS_ENABLED_DEFAULT, 8, 0}, + {"supportsDisableEvents", PT_INT, 0, 1, LIBINPUT_PROP_SENDEVENTS_AVAILABLE, 8, 0}, + {"enabled", PT_INT, 0, 1, LIBINPUT_PROP_SENDEVENTS_ENABLED, 8, 0}, + {"enabledDefault", PT_INT, 0, 1, LIBINPUT_PROP_SENDEVENTS_ENABLED_DEFAULT, 8, 0}, /* LeftHandSupport */ - {"LeftHandedEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_LEFT_HANDED_DEFAULT, 8, 0}, - {"LeftHanded", PT_INT, 0, 1, LIBINPUT_PROP_LEFT_HANDED, 8, 0}, + {"leftHandedEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_LEFT_HANDED_DEFAULT, 8, 0}, + {"leftHanded", PT_INT, 0, 1, LIBINPUT_PROP_LEFT_HANDED, 8, 0}, /* Disable on external mouse */ - {"SupportsDisableEventsOnExternalMouse",PT_INT, 0, 1, LIBINPUT_PROP_SENDEVENTS_AVAILABLE, 8, 1}, - {"DisableEventsOnExternalMouse", PT_INT, 0, 1, LIBINPUT_PROP_SENDEVENTS_ENABLED, 8, 1}, - {"DisableEventsOnExternalMouseDefault", PT_INT, 0, 1, LIBINPUT_PROP_SENDEVENTS_ENABLED_DEFAULT, 8, 1}, + {"supportsDisableEventsOnExternalMouse",PT_INT, 0, 1, LIBINPUT_PROP_SENDEVENTS_AVAILABLE, 8, 1}, + {"disableEventsOnExternalMouse", PT_INT, 0, 1, LIBINPUT_PROP_SENDEVENTS_ENABLED, 8, 1}, + {"disableEventsOnExternalMouseDefault", PT_INT, 0, 1, LIBINPUT_PROP_SENDEVENTS_ENABLED_DEFAULT, 8, 1}, /* Disable while typing */ - {"DisableWhileTypingEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_DISABLE_WHILE_TYPING_DEFAULT, 8, 0}, - {"DisableWhileTyping", PT_INT, 0, 1, LIBINPUT_PROP_DISABLE_WHILE_TYPING, 8, 0}, + {"disableWhileTypingEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_DISABLE_WHILE_TYPING_DEFAULT, 8, 0}, + {"disableWhileTyping", PT_INT, 0, 1, LIBINPUT_PROP_DISABLE_WHILE_TYPING, 8, 0}, /* Middle Emulation */ - {"MiddleEmulationEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_MIDDLE_EMULATION_ENABLED_DEFAULT, 8, 0}, - {"MiddleEmulation", PT_INT, 0, 1, LIBINPUT_PROP_MIDDLE_EMULATION_ENABLED, 8, 0}, + {"middleEmulationEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_MIDDLE_EMULATION_ENABLED_DEFAULT, 8, 0}, + {"middleEmulation", PT_INT, 0, 1, LIBINPUT_PROP_MIDDLE_EMULATION_ENABLED, 8, 0}, /* This is a boolean for all three fingers, no per-finger config */ - {"Tapping", PT_INT, 0, 1, LIBINPUT_PROP_TAP, 8, 0}, - {"TapToClickEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_TAP_DEFAULT, 8, 0}, + {"tapToClick", PT_INT, 0, 1, LIBINPUT_PROP_TAP, 8, 0}, + {"tapToClickEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_TAP_DEFAULT, 8, 0}, /* LMR */ - {"LmrTapButtonMapEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_TAP_BUTTONMAP_DEFAULT, 8, 1}, - {"LmrTapButtonMap", PT_INT, 0, 1, LIBINPUT_PROP_TAP_BUTTONMAP, 8, 1}, + {"lmrTapButtonMapEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_TAP_BUTTONMAP_DEFAULT, 8, 1}, + {"lmrTapButtonMap", PT_INT, 0, 1, LIBINPUT_PROP_TAP_BUTTONMAP, 8, 1}, /* Tap and Drag Enabled */ - {"TapAndDragEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_TAP_DRAG_DEFAULT, 8, 0}, - {"TapAndDrag", PT_INT, 0, 1, LIBINPUT_PROP_TAP_DRAG, 8, 0}, + {"tapAndDragEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_TAP_DRAG_DEFAULT, 8, 0}, + {"tapAndDrag", PT_INT, 0, 1, LIBINPUT_PROP_TAP_DRAG, 8, 0}, /* Tap and Drag Lock Enabled */ - {"TapDragLockEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_TAP_DRAG_LOCK_DEFAULT, 8, 0}, - {"TapDragLock", PT_INT, 0, 1, LIBINPUT_PROP_TAP_DRAG_LOCK, 8, 0}, + {"tapDragLockEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_TAP_DRAG_LOCK_DEFAULT, 8, 0}, + {"tapDragLock", PT_INT, 0, 1, LIBINPUT_PROP_TAP_DRAG_LOCK, 8, 0}, /* libinput normalizes the accel to -1/1 */ - {"DefaultPointerAcceleration", PT_DOUBLE, -1.0, 1.0, LIBINPUT_PROP_ACCEL_DEFAULT, 0 /*float */, 0}, - {"PointerAcceleration", PT_DOUBLE, -1.0, 1.0, LIBINPUT_PROP_ACCEL, 0 /*float */, 0}, + {"defaultPointerAcceleration", PT_DOUBLE, -1.0, 1.0, LIBINPUT_PROP_ACCEL_DEFAULT, 0 /*float */, 0}, + {"pointerAcceleration", PT_DOUBLE, -1.0, 1.0, LIBINPUT_PROP_ACCEL, 0 /*float */, 0}, /* Libinput Accel Profile */ - {"SupportsPointerAccelerationProfileAdaptive", PT_BOOL, 0, 1, LIBINPUT_PROP_ACCEL_PROFILES_AVAILABLE, 8, 0}, - {"DefaultPointerAccelerationProfileAdaptive", PT_BOOL, 0, 1, LIBINPUT_PROP_ACCEL_PROFILE_ENABLED_DEFAULT, 8, 0}, - {"PointerAccelerationProfileAdaptive", PT_BOOL, 0, 1, LIBINPUT_PROP_ACCEL_PROFILE_ENABLED, 8, 0}, - {"SupportsPointerAccelerationProfileFlat", PT_BOOL, 0, 1, LIBINPUT_PROP_ACCEL_PROFILES_AVAILABLE, 8, 1}, - {"DefaultPointerAccelerationProfileFlat", PT_BOOL, 0, 1, LIBINPUT_PROP_ACCEL_PROFILE_ENABLED_DEFAULT, 8, 1}, - {"PointerAccelerationProfileFlat", PT_BOOL, 0, 1, LIBINPUT_PROP_ACCEL_PROFILE_ENABLED, 8, 1}, + {"supportsPointerAccelerationProfileAdaptive", PT_BOOL, 0, 1, LIBINPUT_PROP_ACCEL_PROFILES_AVAILABLE, 8, 0}, + {"defaultPointerAccelerationProfileAdaptive", PT_BOOL, 0, 1, LIBINPUT_PROP_ACCEL_PROFILE_ENABLED_DEFAULT, 8, 0}, + {"pointerAccelerationProfileAdaptive", PT_BOOL, 0, 1, LIBINPUT_PROP_ACCEL_PROFILE_ENABLED, 8, 0}, + {"supportsPointerAccelerationProfileFlat", PT_BOOL, 0, 1, LIBINPUT_PROP_ACCEL_PROFILES_AVAILABLE, 8, 1}, + {"defaultPointerAccelerationProfileFlat", PT_BOOL, 0, 1, LIBINPUT_PROP_ACCEL_PROFILE_ENABLED_DEFAULT, 8, 1}, + {"pointerAccelerationProfileFlat", PT_BOOL, 0, 1, LIBINPUT_PROP_ACCEL_PROFILE_ENABLED, 8, 1}, /* Natural Scrolling */ - {"NaturalScrollEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_NATURAL_SCROLL_DEFAULT, 8, 0}, - {"NaturalScroll", PT_INT, 0, 1, LIBINPUT_PROP_NATURAL_SCROLL, 8, 0}, + {"naturalScrollEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_NATURAL_SCROLL_DEFAULT, 8, 0}, + {"naturalScroll", PT_INT, 0, 1, LIBINPUT_PROP_NATURAL_SCROLL, 8, 0}, + + /* Horizontal scrolling */ + {"horizontalScrolling", PT_INT, 0, 1, LIBINPUT_PROP_HORIZ_SCROLL_ENABLED, 8, 0}, /* Two-Finger Scrolling */ - {"SupportsScrollTwoFinger", PT_INT, 0, 1, LIBINPUT_PROP_SCROLL_METHODS_AVAILABLE, 8, 0}, - {"ScrollTwoFingerEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_SCROLL_METHOD_ENABLED_DEFAULT, 8, 0}, - {"ScrollTwoFinger", PT_INT, 0, 1, LIBINPUT_PROP_SCROLL_METHOD_ENABLED, 8, 0}, + {"supportsScrollTwoFinger", PT_INT, 0, 1, LIBINPUT_PROP_SCROLL_METHODS_AVAILABLE, 8, 0}, + {"scrollTwoFingerEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_SCROLL_METHOD_ENABLED_DEFAULT, 8, 0}, + {"scrollTwoFinger", PT_INT, 0, 1, LIBINPUT_PROP_SCROLL_METHOD_ENABLED, 8, 0}, /* Edge Scrolling */ - {"SupportsScrollEdge", PT_INT, 0, 1, LIBINPUT_PROP_SCROLL_METHODS_AVAILABLE, 8, 1}, - {"ScrollEdgeEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_SCROLL_METHOD_ENABLED_DEFAULT, 8, 1}, - {"ScrollEdge", PT_INT, 0, 1, LIBINPUT_PROP_SCROLL_METHOD_ENABLED, 8, 1}, + {"supportsScrollEdge", PT_INT, 0, 1, LIBINPUT_PROP_SCROLL_METHODS_AVAILABLE, 8, 1}, + {"scrollEdgeEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_SCROLL_METHOD_ENABLED_DEFAULT, 8, 1}, + {"scrollEdge", PT_INT, 0, 1, LIBINPUT_PROP_SCROLL_METHOD_ENABLED, 8, 1}, /* scroll on button */ - {"SupportsScrollOnButtonDown", PT_INT, 0, 1, LIBINPUT_PROP_SCROLL_METHODS_AVAILABLE, 8, 2}, - {"ScrollOnButtonDownEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_SCROLL_METHOD_ENABLED_DEFAULT, 8, 2}, - {"ScrollOnButtonDown", PT_INT, 0, 1, LIBINPUT_PROP_SCROLL_METHOD_ENABLED, 8, 2}, + {"supportsScrollOnButtonDown", PT_INT, 0, 1, LIBINPUT_PROP_SCROLL_METHODS_AVAILABLE, 8, 2}, + {"scrollOnButtonDownEnabledByDefault", PT_INT, 0, 1, LIBINPUT_PROP_SCROLL_METHOD_ENABLED_DEFAULT, 8, 2}, + {"scrollOnButtonDown", PT_INT, 0, 1, LIBINPUT_PROP_SCROLL_METHOD_ENABLED, 8, 2}, /* Scroll Button for scroll on button Down */ - {"DefaultScrollButton", PT_INT, 0, INT_MAX, LIBINPUT_PROP_SCROLL_BUTTON_DEFAULT, 32, 0}, - {"ScrollButton", PT_INT, 0, INT_MAX, LIBINPUT_PROP_SCROLL_BUTTON, 32, 0}, + {"defaultScrollButton", PT_INT, 0, INT_MAX, LIBINPUT_PROP_SCROLL_BUTTON_DEFAULT, 32, 0}, + {"scrollButton", PT_INT, 0, INT_MAX, LIBINPUT_PROP_SCROLL_BUTTON, 32, 0}, /* Click Methods */ - {"SupportsClickMethodAreas", PT_INT, 0, 1, LIBINPUT_PROP_CLICK_METHODS_AVAILABLE, 8, 0}, - {"DefaultClickMethodAreas", PT_INT, 0, 1, LIBINPUT_PROP_CLICK_METHOD_ENABLED_DEFAULT, 8, 0}, - {"ClickMethodAreas", PT_INT, 0, 1, LIBINPUT_PROP_CLICK_METHOD_ENABLED, 8, 0}, + {"supportsClickMethodAreas", PT_INT, 0, 1, LIBINPUT_PROP_CLICK_METHODS_AVAILABLE, 8, 0}, + {"defaultClickMethodAreas", PT_INT, 0, 1, LIBINPUT_PROP_CLICK_METHOD_ENABLED_DEFAULT, 8, 0}, + {"clickMethodAreas", PT_INT, 0, 1, LIBINPUT_PROP_CLICK_METHOD_ENABLED, 8, 0}, - {"SupportsClickMethodClickfinger", PT_INT, 0, 1, LIBINPUT_PROP_CLICK_METHODS_AVAILABLE, 8, 1}, - {"DefaultClickMethodClickfinger", PT_INT, 0, 1, LIBINPUT_PROP_CLICK_METHOD_ENABLED_DEFAULT, 8, 1}, - {"ClickMethodClickfinger", PT_INT, 0, 1, LIBINPUT_PROP_CLICK_METHOD_ENABLED, 8, 1}, + {"supportsClickMethodClickfinger", PT_INT, 0, 1, LIBINPUT_PROP_CLICK_METHODS_AVAILABLE, 8, 1}, + {"defaultClickMethodClickfinger", PT_INT, 0, 1, LIBINPUT_PROP_CLICK_METHOD_ENABLED_DEFAULT, 8, 1}, + {"clickMethodClickfinger", PT_INT, 0, 1, LIBINPUT_PROP_CLICK_METHOD_ENABLED, 8, 1}, /* libinput doesn't have a separate toggle for horiz scrolling */ { NULL, PT_INT, 0, 0, 0, 0, 0 } @@ -174,7 +154,8 @@ } LibinputTouchpad::LibinputTouchpad(Display *display, int deviceId): - XlibTouchpad(nullptr, display, deviceId) + LibinputCommon(), + XlibTouchpad(display, deviceId) { loadSupportedProperties(libinputProperties); @@ -248,6 +229,8 @@ success &= valueLoader(m_naturalScrollEnabledByDefault); success &= valueLoader(m_naturalScroll); + success &= valueLoader(m_horizontalScrolling); + success &= valueLoader(m_supportsScrollTwoFinger); success &= valueLoader(m_scrollTwoFingerEnabledByDefault); success &= valueLoader(m_isScrollTwoFinger); @@ -290,6 +273,7 @@ << valueWriter(m_pointerAccelerationProfileFlat) << valueWriter(m_pointerAccelerationProfileAdaptive) << valueWriter(m_naturalScroll) + << valueWriter(m_horizontalScrolling) << valueWriter(m_isScrollTwoFinger) << valueWriter(m_isScrollEdge) << valueWriter(m_isScrollOnButtonDown) @@ -334,6 +318,7 @@ m_pointerAccelerationProfileFlat.set(m_defaultPointerAccelerationProfileFlat); m_pointerAccelerationProfileAdaptive.set(m_defaultPointerAccelerationProfileAdaptive); m_naturalScroll.set(m_naturalScrollEnabledByDefault); + m_horizontalScrolling.set(true); m_isScrollTwoFinger.set(m_scrollTwoFingerEnabledByDefault); m_isScrollEdge.set(m_scrollEdgeEnabledByDefault); m_isScrollOnButtonDown.set(m_scrollOnButtonDownEnabledByDefault); @@ -360,6 +345,7 @@ m_pointerAccelerationProfileFlat.changed() || m_pointerAccelerationProfileAdaptive.changed() || m_naturalScroll.changed() || + m_horizontalScrolling.changed() || m_isScrollTwoFinger.changed() || m_isScrollEdge.changed() || m_isScrollOnButtonDown.changed() || Index: kcms/touchpad/src/backends/x11/synapticstouchpad.h =================================================================== --- kcms/touchpad/src/backends/x11/synapticstouchpad.h +++ kcms/touchpad/src/backends/x11/synapticstouchpad.h @@ -22,7 +22,7 @@ #include "xlibtouchpad.h" #include "xcbatom.h" -class SynapticsTouchpad : public XlibTouchpad +class SynapticsTouchpad : public QObject, public XlibTouchpad { Q_OBJECT Index: kcms/touchpad/src/backends/x11/synapticstouchpad.cpp =================================================================== --- kcms/touchpad/src/backends/x11/synapticstouchpad.cpp +++ kcms/touchpad/src/backends/x11/synapticstouchpad.cpp @@ -128,7 +128,7 @@ { NULL, PT_INT, 0, 0, 0, 0, 0 } }; -SynapticsTouchpad::SynapticsTouchpad(Display *display, int deviceId): XlibTouchpad(nullptr,display, deviceId), +SynapticsTouchpad::SynapticsTouchpad(Display *display, int deviceId): XlibTouchpad(display, deviceId), m_resX(1), m_resY(1) { m_capsAtom.intern(m_connection, SYNAPTICS_PROP_CAPABILITIES); Index: kcms/touchpad/src/backends/x11/xlibbackend.h =================================================================== --- kcms/touchpad/src/backends/x11/xlibbackend.h +++ kcms/touchpad/src/backends/x11/xlibbackend.h @@ -29,6 +29,8 @@ #include "touchpadbackend.h" #include "xlibtouchpad.h" +#include "libinputtouchpad.h" +#include "synapticstouchpad.h" #include Index: kcms/touchpad/src/backends/x11/xlibbackend.cpp =================================================================== --- kcms/touchpad/src/backends/x11/xlibbackend.cpp +++ kcms/touchpad/src/backends/x11/xlibbackend.cpp @@ -94,6 +94,7 @@ m_libinputIdentifierAtom.intern(m_connection, "libinput Send Events Modes Available"); m_device.reset(findTouchpad()); + if (!m_device) { m_errorString = i18n("No touchpad found"); } @@ -349,7 +350,18 @@ QVector XlibBackend::getDevices() const { - return m_device ? QVector { m_device.data() } : QVector(); + QVector touchpads; + + LibinputTouchpad* libinputtouchpad = dynamic_cast (m_device.data()); + SynapticsTouchpad* synaptics = dynamic_cast (m_device.data()); + + if ( libinputtouchpad) { + touchpads.push_back(libinputtouchpad); + } + if (synaptics) { + touchpads.push_back(synaptics); + } + return touchpads; } void XlibBackend::watchForEvents(bool keyboard) Index: kcms/touchpad/src/backends/x11/xlibtouchpad.h =================================================================== --- kcms/touchpad/src/backends/x11/xlibtouchpad.h +++ kcms/touchpad/src/backends/x11/xlibtouchpad.h @@ -43,13 +43,13 @@ unsigned prop_offset; /* Offset inside property */ }; -class XlibTouchpad : public QObject +class XlibTouchpad { - Q_OBJECT + Q_GADGET public: - XlibTouchpad(QObject *parent, Display *display, int deviceId); - virtual ~XlibTouchpad() {}; + XlibTouchpad(Display *display, int deviceId); + virtual ~XlibTouchpad() {} int deviceId() { return m_deviceId; } const QStringList &supportedParameters() const { return m_supported; } Index: kcms/touchpad/src/backends/x11/xlibtouchpad.cpp =================================================================== --- kcms/touchpad/src/backends/x11/xlibtouchpad.cpp +++ kcms/touchpad/src/backends/x11/xlibtouchpad.cpp @@ -16,8 +16,7 @@ return value; } -XlibTouchpad::XlibTouchpad(QObject *parent, Display *display, int deviceId) : - QObject(parent), +XlibTouchpad::XlibTouchpad(Display *display, int deviceId) : m_display(display), m_connection(XGetXCBConnection(display)), m_deviceId(deviceId) Index: kcms/touchpad/src/kcm/libinput/main.qml =================================================================== --- kcms/touchpad/src/kcm/libinput/main.qml +++ kcms/touchpad/src/kcm/libinput/main.qml @@ -76,6 +76,7 @@ naturalScroll.load() rightClickMethod.load() middleClickMethod.load() + disableHorizontalScrolling.load() loading = false } @@ -568,6 +569,31 @@ } } + Controls.CheckBox { + id: disableHorizontalScrolling + text: i18nd("kcm_touchpad", "Disable horizontal scrolling") + + function load() { + visible = touchpad.supportsHorizontalScrolling + enabled = touchpad.supportsHorizontalScrolling + checked = enabled && !touchpad.horizontalScrolling + } + + onCheckedChanged: { + if (enabled && !root.loading) { + touchpad.horizontalScrolling = !checked + root.changeSignal() + } + } + + hoverEnabled: true + Controls.ToolTip { + text: i18nd("kcm_touchpad", "Disable horizontal scrolling") + visible: parent.hovered + delay: 1000 + } + } + Item { Kirigami.FormData.isSection: false } Index: kcms/touchpad/src/kcm/touchpadconfigcontainer.cpp =================================================================== --- kcms/touchpad/src/kcm/touchpadconfigcontainer.cpp +++ kcms/touchpad/src/kcm/touchpadconfigcontainer.cpp @@ -39,12 +39,12 @@ { TouchpadBackend *backend = TouchpadBackend::implementation(); if (KWindowSystem::isPlatformX11()) { - if (backend->getMode() == TouchpadInputBackendMode::XLibinput){ + if (backend->getMode() == TouchpadInputBackendMode::XLibinput) { m_plugin = new TouchpadConfigLibinput(this, backend); } - else if (backend->getMode() == TouchpadInputBackendMode::XSynaptics) + else if (backend->getMode() == TouchpadInputBackendMode::XSynaptics) { m_plugin = new TouchpadConfigXlib(this, backend); - + } } else if (KWindowSystem::isPlatformWayland()) { m_plugin = new TouchpadConfigLibinput(this, backend); }