diff --git a/kcms/touchpad/src/CMakeLists.txt b/kcms/touchpad/src/CMakeLists.txt --- a/kcms/touchpad/src/CMakeLists.txt +++ b/kcms/touchpad/src/CMakeLists.txt @@ -12,13 +12,11 @@ ) include(backends/x11.cmake) -include(backends/kwin_wayland.cmake) set(SRCS ${SRCS} kcm/touchpadconfigcontainer.cpp kcm/touchpadconfigplugin.cpp - kcm/libinput/touchpadconfiglibinput.cpp kcm/xlib/customslider.cpp kcm/xlib/sliderpair.cpp kcm/xlib/testarea.cpp @@ -32,8 +30,6 @@ ${CMAKE_CURRENT_BINARY_DIR}/org.kde.touchpad.xml ) -qt5_add_resources( SRCS kcm/resources.qrc ) - kconfig_add_kcfg_files(SRCS kcm/xlib/touchpadparameters.kcfgc) ki18n_wrap_ui(SRCS diff --git a/kcms/touchpad/src/backends/kwin_wayland.cmake b/kcms/touchpad/src/backends/kwin_wayland.cmake deleted file mode 100644 --- a/kcms/touchpad/src/backends/kwin_wayland.cmake +++ /dev/null @@ -1,5 +0,0 @@ -SET(backend_SRCS - ${backend_SRCS} - backends/kwin_wayland/kwinwaylandbackend.cpp - backends/kwin_wayland/kwinwaylandtouchpad.cpp -) diff --git a/kcms/touchpad/src/backends/kwin_wayland/kwinwaylandbackend.h b/kcms/touchpad/src/backends/kwin_wayland/kwinwaylandbackend.h deleted file mode 100644 --- a/kcms/touchpad/src/backends/kwin_wayland/kwinwaylandbackend.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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 KWINWAYLANDBACKEND_H -#define KWINWAYLANDBACKEND_H - -#include "touchpadbackend.h" - -#include - -class KWinWaylandTouchpad; -class QDBusInterface; - -class KWinWaylandBackend : public TouchpadBackend -{ - Q_OBJECT - - Q_PROPERTY(int touchpadCount READ touchpadCount CONSTANT) - -public: - explicit KWinWaylandBackend(QObject *parent = 0); - ~KWinWaylandBackend(); - - bool applyConfig() override; - bool getConfig() override; - bool getDefaultConfig() override; - bool isChangedConfig() const override; - QString errorString() const override { return m_errorString; } - - virtual int touchpadCount() const override { return m_devices.count(); } - virtual QVector getDevices() const override { return m_devices; } - -private Q_SLOTS: - void onDeviceAdded(QString); - void onDeviceRemoved(QString); - -private: - void findTouchpads(); - - QDBusInterface* m_deviceManager; - QVector m_devices; - - QString m_errorString = QString(); -}; - -#endif // KWINWAYLANDBACKEND_H diff --git a/kcms/touchpad/src/backends/kwin_wayland/kwinwaylandbackend.cpp b/kcms/touchpad/src/backends/kwin_wayland/kwinwaylandbackend.cpp deleted file mode 100644 --- a/kcms/touchpad/src/backends/kwin_wayland/kwinwaylandbackend.cpp +++ /dev/null @@ -1,164 +0,0 @@ -/* - * 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. - */ - -#include "kwinwaylandbackend.h" -#include "kwinwaylandtouchpad.h" - -#include - -#include - -#include -#include -#include -#include - -#include "logging.h" - -KWinWaylandBackend::KWinWaylandBackend(QObject *parent) : - TouchpadBackend(parent) -{ - - m_deviceManager = new QDBusInterface (QStringLiteral("org.kde.KWin"), - QStringLiteral("/org/kde/KWin/InputDevice"), - QStringLiteral("org.kde.KWin.InputDeviceManager"), - QDBusConnection::sessionBus(), - this); - - findTouchpads(); - - m_deviceManager->connection().connect(QStringLiteral("org.kde.KWin"), - QStringLiteral("/org/kde/KWin/InputDevice"), - QStringLiteral("org.kde.KWin.InputDeviceManager"), - QStringLiteral("deviceAdded"), - this, - SLOT(onDeviceAdded(QString))); - m_deviceManager->connection().connect(QStringLiteral("org.kde.KWin"), - QStringLiteral("/org/kde/KWin/InputDevice"), - QStringLiteral("org.kde.KWin.InputDeviceManager"), - QStringLiteral("deviceRemoved"), - this, - SLOT(onDeviceRemoved(QString))); -} - -KWinWaylandBackend::~KWinWaylandBackend() -{ - qDeleteAll(m_devices); - delete m_deviceManager; -} - -void KWinWaylandBackend::findTouchpads() -{ - QStringList devicesSysNames; - const QVariant reply = m_deviceManager->property("devicesSysNames"); - if (reply.isValid()) { - qCDebug(KCM_TOUCHPAD) << "Devices list received successfully from KWin."; - devicesSysNames = reply.toStringList(); - } - else { - qCCritical(KCM_TOUCHPAD) << "Error on receiving device list from KWin."; - m_errorString = i18n("Querying input devices failed. Please reopen this settings module."); - return; - } - - bool touchpadFound = false; - for (QString sn : devicesSysNames) { - QDBusInterface deviceIface(QStringLiteral("org.kde.KWin"), - QStringLiteral("/org/kde/KWin/InputDevice/") + sn, - QStringLiteral("org.kde.KWin.InputDevice"), - QDBusConnection::sessionBus(), - this); - const QVariant reply = deviceIface.property("touchpad"); - if (reply.isValid() && reply.toBool()) { - KWinWaylandTouchpad* tp = new KWinWaylandTouchpad(sn); - if (!tp->init()) { - qCCritical(KCM_TOUCHPAD) << "Error on creating touchpad object" << sn; - m_errorString = i18n("Critical error on reading fundamental device infos for touchpad %1.", sn); - return; - } - m_devices.append(tp); - touchpadFound = true; - qCDebug(KCM_TOUCHPAD).nospace() << "Touchpad found: " << tp->name() << " (" << tp->sysName() << ")"; - } - } -} - -bool KWinWaylandBackend::applyConfig() -{ - return std::all_of(m_devices.constBegin(), m_devices.constEnd(), - [] (QObject *t) { return static_cast(t)->applyConfig(); }); -} - -bool KWinWaylandBackend::getConfig() -{ - return std::all_of(m_devices.constBegin(), m_devices.constEnd(), - [] (QObject *t) { return static_cast(t)->getConfig(); }); -} - -bool KWinWaylandBackend::getDefaultConfig() -{ - return std::all_of(m_devices.constBegin(), m_devices.constEnd(), - [] (QObject *t) { return static_cast(t)->getDefaultConfig(); }); -} - -bool KWinWaylandBackend::isChangedConfig() const -{ - return std::any_of(m_devices.constBegin(), m_devices.constEnd(), - [] (QObject *t) { return static_cast(t)->isChangedConfig(); }); -} - -void KWinWaylandBackend::onDeviceAdded(QString sysName) -{ - if (std::any_of(m_devices.constBegin(), m_devices.constEnd(), - [sysName] (QObject *t) { return static_cast(t)->sysName() == sysName; })) { - return; - } - - QDBusInterface deviceIface(QStringLiteral("org.kde.KWin"), - QStringLiteral("/org/kde/KWin/InputDevice/") + sysName, - QStringLiteral("org.kde.KWin.InputDevice"), - QDBusConnection::sessionBus(), - this); - QVariant reply = deviceIface.property("touchpad"); - if (reply.isValid() && reply.toBool()) { - KWinWaylandTouchpad* tp = new KWinWaylandTouchpad(sysName); - if (!tp->init() || !tp->getConfig()) { - emit touchpadAdded(false); - return; - } - m_devices.append(tp); - qCDebug(KCM_TOUCHPAD).nospace() << "Touchpad connected: " << tp->name() << " (" << tp->sysName() << ")"; - emit touchpadAdded(true); - } -} - -void KWinWaylandBackend::onDeviceRemoved(QString sysName) -{ - QVector::const_iterator it = std::find_if(m_devices.constBegin(), m_devices.constEnd(), - [sysName] (QObject *t) { return static_cast(t)->sysName() == sysName; }); - if (it == m_devices.cend()) { - return; - } - - KWinWaylandTouchpad *tp = static_cast(*it); - qCDebug(KCM_TOUCHPAD).nospace() << "Touchpad disconnected: " << tp->name() << " (" << tp->sysName() << ")"; - - int index = it - m_devices.cbegin(); - m_devices.removeAt(index); - emit touchpadRemoved(index); -} diff --git a/kcms/touchpad/src/backends/kwin_wayland/kwinwaylandtouchpad.h b/kcms/touchpad/src/backends/kwin_wayland/kwinwaylandtouchpad.h deleted file mode 100644 --- a/kcms/touchpad/src/backends/kwin_wayland/kwinwaylandtouchpad.h +++ /dev/null @@ -1,458 +0,0 @@ -/* - * 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 - -#include -#include - -class QDBusInterface; - -class KWinWaylandTouchpad : 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) - - // - // 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) - -public: - KWinWaylandTouchpad(QString dbusName); - ~KWinWaylandTouchpad() override; - - bool init(); - - bool getConfig(); - bool getDefaultConfig(); - bool applyConfig(); - bool isChangedConfig() const; - - // - // 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; - } - Qt::MouseButtons supportedButtons() const { - return m_supportedButtons.val; - } - - // - // advanced - bool supportsLeftHanded() const { - 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 { - return m_supportsDisableEventsOnExternalMouse.val; - } - - bool supportsDisableWhileTyping() const { - 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 { - 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 { - return m_supportsPointerAcceleration.val; - } - qreal pointerAcceleration() const { - return m_pointerAcceleration.val; - } - void setPointerAcceleration(qreal acceleration) { - m_pointerAcceleration.set(acceleration); - } - - bool supportsPointerAccelerationProfileFlat() const { - 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 { - 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 { - 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 supportsScrollTwoFinger() const { - 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 { - 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 { - 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); - } - -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(); - -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"); - - - QDBusInterface *m_iface; -}; - -#endif diff --git a/kcms/touchpad/src/backends/kwin_wayland/kwinwaylandtouchpad.cpp b/kcms/touchpad/src/backends/kwin_wayland/kwinwaylandtouchpad.cpp deleted file mode 100644 --- a/kcms/touchpad/src/backends/kwin_wayland/kwinwaylandtouchpad.cpp +++ /dev/null @@ -1,249 +0,0 @@ -/* - * 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. - */ - -#include "kwinwaylandtouchpad.h" - -#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) -{ - m_iface = new QDBusInterface(QStringLiteral("org.kde.KWin"), - QStringLiteral("/org/kde/KWin/InputDevice/") + dbusName, - QStringLiteral("org.kde.KWin.InputDevice"), - QDBusConnection::sessionBus(), - this); -} - -KWinWaylandTouchpad::~KWinWaylandTouchpad() -{ - delete m_iface; -} - -bool KWinWaylandTouchpad::init() -{ - // need to do it here in order to populate combobox and handle events - return valueLoader(m_name) && valueLoader(m_sysName); -} - -bool KWinWaylandTouchpad::getConfig() -{ - bool success = true; - - // general - success &= valueLoader(m_supportsDisableEvents); - success &= valueLoader(m_supportsLeftHanded); - success &= valueLoader(m_supportedButtons); - success &= valueLoader(m_leftHandedEnabledByDefault); - success &= valueLoader(m_enabled); - success &= valueLoader(m_leftHanded); - // advanced - success &= valueLoader(m_supportsPointerAcceleration); - success &= valueLoader(m_supportsPointerAccelerationProfileFlat); - success &= valueLoader(m_supportsPointerAccelerationProfileAdaptive); - success &= valueLoader(m_supportsDisableWhileTyping); - success &= valueLoader(m_supportsDisableEventsOnExternalMouse); - success &= valueLoader(m_defaultPointerAcceleration); - success &= valueLoader(m_defaultPointerAccelerationProfileFlat); - success &= valueLoader(m_defaultPointerAccelerationProfileAdaptive); - success &= valueLoader(m_disableWhileTypingEnabledByDefault); - success &= valueLoader(m_leftHandedEnabledByDefault); - success &= valueLoader(m_pointerAcceleration); - success &= valueLoader(m_pointerAccelerationProfileFlat); - success &= valueLoader(m_pointerAccelerationProfileAdaptive); - success &= valueLoader(m_disableWhileTyping); - // tapping - success &= valueLoader(m_tapFingerCount); - success &= valueLoader(m_supportsMiddleEmulation); - success &= valueLoader(m_tapToClickEnabledByDefault); - success &= valueLoader(m_tapAndDragEnabledByDefault); - success &= valueLoader(m_tapDragLockEnabledByDefault); - success &= valueLoader(m_middleEmulationEnabledByDefault); - success &= valueLoader(m_tapToClick); - success &= valueLoader(m_tapAndDrag); - success &= valueLoader(m_tapDragLock); - success &= valueLoader(m_middleEmulation); - success &= valueLoader(m_lmrTapButtonMapEnabledByDefault); - success &= valueLoader(m_lmrTapButtonMap); - // scrolling modes avail - success &= valueLoader(m_supportsNaturalScroll); - success &= valueLoader(m_supportsScrollTwoFinger); - success &= valueLoader(m_supportsScrollEdge); - success &= valueLoader(m_supportsScrollOnButtonDown); - // default scrolling modes - success &= valueLoader(m_naturalScrollEnabledByDefault); - success &= valueLoader(m_scrollTwoFingerEnabledByDefault); - success &= valueLoader(m_scrollEdgeEnabledByDefault); - success &= valueLoader(m_scrollOnButtonDownEnabledByDefault); - success &= valueLoader(m_defaultScrollButton); - // current scrolling mode - success &= valueLoader(m_naturalScroll); - success &= valueLoader(m_isScrollTwoFinger); - success &= valueLoader(m_isScrollEdge); - success &= valueLoader(m_isScrollOnButtonDown); - success &= valueLoader(m_scrollButton); - - return success; -} - -bool KWinWaylandTouchpad::getDefaultConfig() -{ - m_enabled.set(true); - m_leftHanded.set(false); - - m_pointerAcceleration.set(m_defaultPointerAcceleration); - m_pointerAccelerationProfileFlat.set(m_defaultPointerAccelerationProfileFlat); - m_pointerAccelerationProfileAdaptive.set(m_defaultPointerAccelerationProfileAdaptive); - - m_disableWhileTyping.set(m_disableWhileTypingEnabledByDefault); - - m_tapToClick.set(m_tapToClickEnabledByDefault); - m_tapAndDrag.set(m_tapAndDragEnabledByDefault); - m_tapDragLock.set(m_tapDragLockEnabledByDefault); - m_middleEmulation.set(m_middleEmulationEnabledByDefault); - - m_naturalScroll.set(m_naturalScrollEnabledByDefault); - m_isScrollTwoFinger.set(m_scrollTwoFingerEnabledByDefault); - m_isScrollEdge.set(m_scrollEdgeEnabledByDefault); - m_isScrollOnButtonDown.set(m_scrollOnButtonDownEnabledByDefault); - - return true; -} - -bool KWinWaylandTouchpad::applyConfig() -{ - QVector msgs; - - msgs << valueWriter(m_enabled) - << valueWriter(m_leftHanded) - << valueWriter(m_pointerAcceleration) - << valueWriter(m_defaultPointerAccelerationProfileFlat) - << valueWriter(m_defaultPointerAccelerationProfileAdaptive) - - << valueWriter(m_disableWhileTyping) - << valueWriter(m_middleEmulation) - - << valueWriter(m_tapToClick) - << valueWriter(m_tapAndDrag) - << valueWriter(m_tapDragLock) - << valueWriter(m_lmrTapButtonMap) - - << valueWriter(m_naturalScroll) - << valueWriter(m_isScrollTwoFinger) - << valueWriter(m_isScrollEdge) - << valueWriter(m_isScrollOnButtonDown) - << valueWriter(m_scrollButton); - - bool success = true; - QString error_msg; - - for (QString m : msgs) { - if (!m.isNull()) { - qCCritical(KCM_TOUCHPAD) << "in error:" << m; - if (!success) { - error_msg.append("\n"); - } - error_msg.append(m); - success = false; - } - } - - if (!success) { - qCCritical(KCM_TOUCHPAD) << error_msg; - } - return success; -} - -bool KWinWaylandTouchpad::isChangedConfig() const -{ - return m_enabled.changed() || - m_leftHanded.changed() || - m_pointerAcceleration.changed() || - m_pointerAccelerationProfileFlat.changed() || - m_pointerAccelerationProfileAdaptive.changed() || - m_disableWhileTyping.changed() || - m_middleEmulation.changed() || - m_tapToClick.changed() || - m_tapAndDrag.changed() || - m_tapDragLock.changed() || - m_lmrTapButtonMap.changed() || - m_naturalScroll.changed() || - m_isScrollTwoFinger.changed() || - m_isScrollEdge.changed() || - m_isScrollOnButtonDown.changed() || - m_scrollButton.changed(); -} - -template -QString KWinWaylandTouchpad::valueWriter(const Prop &prop) -{ - if (!prop.changed()) { - return QString(); - } - m_iface->setProperty(prop.dbus, prop.val); - QDBusError error = m_iface->lastError(); - if (error.isValid()) { - qCCritical(KCM_TOUCHPAD) << error.message(); - return error.message(); - } - return QString(); -} - -template -bool KWinWaylandTouchpad::valueLoader(Prop &prop) -{ - QVariant reply = m_iface->property(prop.dbus); - if (!reply.isValid()) { - qCCritical(KCM_TOUCHPAD) << "Error on d-bus read of" << prop.dbus; - prop.avail = false; - return false; - } - prop.avail = true; - - T replyValue = valueLoaderPart(reply); - - prop.old = replyValue; - prop.val = replyValue; - return true; -} diff --git a/kcms/touchpad/src/kcm/kcm_touchpad.desktop b/kcms/touchpad/src/kcm/kcm_touchpad.desktop --- a/kcms/touchpad/src/kcm/kcm_touchpad.desktop +++ b/kcms/touchpad/src/kcm/kcm_touchpad.desktop @@ -13,6 +13,8 @@ X-KDE-ParentApp=kcontrol X-KDE-System-Settings-Parent-Category=input-devices +X-KDE-OnlyShowOnQtPlatforms=xcb + Name=Touchpad Name[ar]=لوحة اللمس Name[ca]=Ratolí tàctil diff --git a/kcms/touchpad/src/kcm/libinput/main.qml b/kcms/touchpad/src/kcm/libinput/main.qml deleted file mode 100644 --- a/kcms/touchpad/src/kcm/libinput/main.qml +++ /dev/null @@ -1,562 +0,0 @@ -/* - * Copyright 2017 Roman Gilg - * Copyright 2018 Furkan Tokac - * - * 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. - */ - -import QtQuick 2.7 -import QtQuick.Controls 2.0 as Controls -import QtQuick.Layouts 1.3 as Layouts - -import org.kde.kcm 1.1 as KCM -import org.kde.kirigami 2.4 as Kirigami - -// TODO: Change ScrollablePage as KCM.SimpleKCM -// after rewrite the KCM in KConfigModule. -Kirigami.ScrollablePage { - id: root - - spacing: Kirigami.Units.smallSpacing - - property size minimumSizeHint: Qt.size(formLayout.width/2, deviceSelector.height) - - property alias deviceIndex: deviceSelector.currentIndex - signal changeSignal() - - property QtObject touchpad - property int touchpadCount: backend.touchpadCount - - property bool loading: false - - function resetModel(index) { - touchpadCount = backend.touchpadCount - formLayout.enabled = touchpadCount - deviceSelector.enabled = touchpadCount > 1 - - loading = true - if (touchpadCount) { - touchpad = deviceModel[index] - deviceSelector.model = deviceModel - deviceSelector.currentIndex = index - console.log("Touchpad configuration of device '" + - (index + 1) + " : " + touchpad.name + "' opened") - } else { - deviceSelector.model = [""] - console.log("No touchpad found") - } - loading = false - } - - function syncValuesFromBackend() { - loading = true - - deviceEnabled.load() - dwt.load() - leftHanded.load() - accelSpeed.load() - accelProfile.load() - tapToClick.load() - tapAndDrag.load() - tapAndDragLock.load() - multiTap.load() - scrollMethod.load() - naturalScroll.load() - - loading = false - } - - Kirigami.FormLayout { - id: formLayout - - // Device - Controls.ComboBox { - Kirigami.FormData.label: i18n("Device:") - id: deviceSelector - - enabled: touchpadCount > 1 - Layouts.Layout.fillWidth: true - model: deviceModel - textRole: "name" - - onCurrentIndexChanged: { - if (touchpadCount) { - touchpad = deviceModel[currentIndex] - if (!loading) { - changeSignal() - } - console.log("Touchpad configuration of device '" + - (currentIndex+1) + " : " + touchpad.name + "' opened") - } - root.syncValuesFromBackend() - } - } - - Kirigami.Separator { - } - - // General settings - Controls.CheckBox { - Kirigami.FormData.label: i18n("General:") - id: deviceEnabled - text: i18n("Device enabled") - - hoverEnabled: true - Controls.ToolTip { - text: i18n("Accept input through this device.") - visible: parent.hovered - delay: 1000 - } - - function load() { - if (!formLayout.enabled) { - checked = false - return - } - enabled = touchpad.supportsDisableEvents - checked = enabled && touchpad.enabled - } - - onCheckedChanged: { - if (enabled && !root.loading) { - touchpad.enabled = checked - root.changeSignal() - } - } - } - - Controls.CheckBox { - id: dwt - text: i18n("Disable while typing") - - hoverEnabled: true - Controls.ToolTip { - text: i18n("Disable touchpad while typing to prevent accidental inputs.") - visible: parent.hovered - delay: 1000 - } - - function load() { - if (!formLayout.enabled) { - checked = false - return - } - enabled = touchpad.supportsDisableWhileTyping - checked = enabled && touchpad.disableWhileTyping - } - - onCheckedChanged: { - if (enabled && !root.loading) { - touchpad.disableWhileTyping = checked - root.changeSignal() - } - } - } - - Controls.CheckBox { - id: leftHanded - text: i18n("Left handed mode") - - hoverEnabled: true - Controls.ToolTip { - text: i18n("Swap left and right buttons.") - visible: parent.hovered - delay: 1000 - } - - function load() { - if (!formLayout.enabled) { - checked = false - return - } - enabled = touchpad.supportsLeftHanded - checked = enabled && touchpad.leftHanded - } - - onCheckedChanged: { - if (enabled && !root.loading) { - touchpad.leftHanded = checked - root.changeSignal() - } - } - } - - Controls.CheckBox { - id: middleEmulation - text: i18n("Press left and right buttons for middle click") - - hoverEnabled: true - Controls.ToolTip { - text: i18n("Clicking left and right button simultaneously sends middle button click.") - visible: parent.hovered - delay: 1000 - } - - function load() { - if (!formLayout.enabled) { - checked = false - return - } - enabled = touchpad.supportsMiddleEmulation - checked = enabled && touchpad.middleEmulation - } - - onCheckedChanged: { - if (enabled && !root.loading) { - touchpad.middleEmulation = checked - root.changeSignal() - } - } - } - - Kirigami.Separator { - } - - // Acceleration - Controls.Slider { - Kirigami.FormData.label: i18n("Pointer speed:") - id: accelSpeed - - from: 1 - to: 11 - stepSize: 1 - - function load() { - enabled = touchpad.supportsPointerAcceleration - if (!enabled) { - value = 0.1 - return - } - // transform libinput's pointer acceleration range [-1, 1] to slider range [1, 11] - value = 6 + touchpad.pointerAcceleration / 0.2 - } - - onValueChanged: { - if (touchpad != undefined && enabled && !root.loading) { - // transform slider range [1, 11] to libinput's pointer acceleration range [-1, 1] - // by *10 and /10, we ignore the floating points after 1 digit. This prevents from - // having a libinput value like 0.60000001 - touchpad.pointerAcceleration = Math.round(((value-6) * 0.2) * 10) / 10 - root.changeSignal() - } - } - } - - Layouts.ColumnLayout { - Kirigami.FormData.label: i18n("Acceleration profile:") - Kirigami.FormData.buddyFor: accelProfileFlat - id: accelProfile - spacing: Kirigami.Units.smallSpacing - - function load() { - enabled = touchpad.supportsPointerAccelerationProfileAdaptive - - if (!enabled) { - accelProfileFlat.checked = false - accelProfileAdaptive.checked = false - return - } - - if(touchpad.pointerAccelerationProfileAdaptive) { - accelProfileAdaptive.checked = true - } else { - accelProfileFlat.checked = true - } - } - - function syncCurrent() { - if (enabled && !root.loading) { - touchpad.pointerAccelerationProfileFlat = accelProfileFlat.checked - touchpad.pointerAccelerationProfileAdaptive = accelProfileAdaptive.checked - root.changeSignal() - } - } - - Controls.RadioButton { - id: accelProfileFlat - text: i18n("Flat") - - hoverEnabled: true - Controls.ToolTip { - text: i18n("Cursor moves the same distance as finger.") - visible: parent.hovered - delay: 1000 - } - onCheckedChanged: accelProfile.syncCurrent() - } - - Controls.RadioButton { - id: accelProfileAdaptive - text: i18n("Adaptive") - - hoverEnabled: true - Controls.ToolTip { - text: i18n("Cursor travel distance depends on movement speed of finger.") - visible: parent.hovered - delay: 1000 - } - onCheckedChanged: accelProfile.syncCurrent() - } - } - - Kirigami.Separator { - } - - // Tapping - Controls.CheckBox { - Kirigami.FormData.label: i18n("Tapping:") - id: tapToClick - text: i18n("Tap-to-click") - - hoverEnabled: true - Controls.ToolTip { - text: i18n("Single tap is left button click.") - visible: parent.hovered - delay: 1000 - } - - function load() { - enabled = touchpad.tapFingerCount > 0 - checked = enabled && touchpad.tapToClick - } - - function updateDependents() { - loading = true - tapAndDrag.load() - tapAndDragLock.load() - multiTap.load() - loading = false - } - - onCheckedChanged: { - if (enabled && !root.loading) { - touchpad.tapToClick = checked - updateDependents() - root.changeSignal() - } - } - } - - Controls.CheckBox { - id: tapAndDrag - text: i18n("Tap-and-drag") - - hoverEnabled: true - Controls.ToolTip { - text: i18n("Sliding over touchpad directly after tap drags.") - visible: parent.hovered - delay: 1000 - } - - function load() { - enabled = touchpad.tapFingerCount > 0 && tapToClick.checked - checked = enabled && touchpad.tapAndDrag - } - - function updateDependents() { - loading = true - tapAndDragLock.load() - loading = false - } - - onCheckedChanged: { - if (enabled && !root.loading) { - touchpad.tapAndDrag = checked - updateDependents() - root.changeSignal() - } - } - } - - Controls.CheckBox { - id: tapAndDragLock - text: i18n("Tap-and-drag lock") - - hoverEnabled: true - Controls.ToolTip { - text: i18n("Dragging continues after a short finger lift.") - visible: parent.hovered - delay: 1000 - } - - function load() { - enabled = touchpad.tapFingerCount > 0 && tapAndDrag.checked - checked = enabled && touchpad.tapDragLock - } - - onCheckedChanged: { - if (enabled && !root.loading) { - touchpad.tapDragLock = checked - root.changeSignal() - } - } - } - - Layouts.ColumnLayout { - Kirigami.FormData.label: i18n("Two-finger tap:") - Kirigami.FormData.buddyFor: multiTapRightClick - id: multiTap - - spacing: Kirigami.Units.smallSpacing - - function load() { - enabled = touchpad.supportsLmrTapButtonMap && tapToClick.checked - if (touchpad.tapFingerCount > 2) { - multiTapRightClick.text = i18n("Right-click (three-finger tap to middle-click)") - multiTapRightClickToolTip.text = i18n("Tap with two fingers to right-click, tap with three fingers to middle-click.") - - multiTapMiddleClick.text = i18n("Middle-click (three-finger tap right-click)") - multiTapMiddleClickToolTip.text = i18n("Tap with two fingers to middle-click, tap with three fingers to right-click.") - } else { - multiTapRightClick.text = i18n("Righ-click") - multiTapRightClickToolTip.text = i18n("Tap with two fingers to right-click.") - - multiTapMiddleClick.text = i18n("Middle-click") - multiTapMiddleClickToolTip.text = i18n("Tap with two fingers to middle-click.") - } - - if (!enabled) { - multiTapRightClick.checked = false - multiTapMiddleClick.checked = false - return - } - - if(touchpad.lmrTapButtonMap) { - multiTapMiddleClick.checked = true - } else { - multiTapRightClick.checked = true - } - } - - function syncCurrent() { - if (enabled && !root.loading) { - touchpad.lmrTapButtonMap = multiTapMiddleClick.checked - root.changeSignal() - } - } - - Controls.RadioButton { - id: multiTapRightClick - // text: is handled dynamically on load. - - hoverEnabled: true - Controls.ToolTip { - id: multiTapRightClickToolTip - visible: parent.hovered - delay: 1000 - // text: is handled dynamically on load. - } - onCheckedChanged: multiTap.syncCurrent() - } - - Controls.RadioButton { - id: multiTapMiddleClick - // text: is handled dynamically on load. - - hoverEnabled: true - Controls.ToolTip { - id: multiTapMiddleClickToolTip - visible: parent.hovered - delay: 1000 - // text: is handled dynamically on load. - } - onCheckedChanged: multiTap.syncCurrent() - } - } - - Kirigami.Separator { - } - - // Scrolling - Layouts.ColumnLayout { - Kirigami.FormData.label: i18n("Scrolling:") - Kirigami.FormData.buddyFor: scrollMethodTwoFingers - id: scrollMethod - - spacing: Kirigami.Units.smallSpacing - - function load() { - scrollMethodTwoFingers.enabled = touchpad.supportsScrollTwoFinger - scrollMethodTouchpadEdges.enabled = touchpad.supportsScrollEdge - - if(scrollMethodTouchpadEdges.enabled && touchpad.scrollEdge) { - scrollMethodTouchpadEdges.checked = formLayout.enabled - } else { - scrollMethodTwoFingers.checked = formLayout.enabled - } - } - - function syncCurrent() { - if (enabled && !root.loading) { - touchpad.scrollTwoFinger = scrollMethodTwoFingers.checked - touchpad.scrollEdge = scrollMethodTouchpadEdges.checked - root.changeSignal() - } - loading = true - naturalScroll.load() - loading = false - } - - Controls.RadioButton { - id: scrollMethodTwoFingers - text: i18n("Two fingers") - - hoverEnabled: true - Controls.ToolTip { - text: i18n("Slide with two fingers scrolls.") - visible: parent.hovered - delay: 1000 - } - } - - Controls.RadioButton { - id: scrollMethodTouchpadEdges - text: i18n("Touchpad edges") - - hoverEnabled: true - Controls.ToolTip { - text: i18n("Slide on the touchpad edges scrolls.") - visible: parent.hovered - delay: 1000 - } - onCheckedChanged: scrollMethod.syncCurrent() - } - } - - Controls.CheckBox { - id: naturalScroll - text: i18n("Invert scroll direction (Natural scrolling)") - - function load() { - enabled = touchpad.supportsNaturalScroll - checked = enabled && touchpad.naturalScroll - } - - onCheckedChanged: { - if (enabled && !root.loading) { - touchpad.naturalScroll = checked - root.changeSignal() - } - } - - hoverEnabled: true - Controls.ToolTip { - text: i18n("Touchscreen like scrolling.") - visible: parent.hovered - delay: 1000 - } - } - } // END Kirigami.FormLayout -} // END Kirigami.ScrollablePage diff --git a/kcms/touchpad/src/kcm/libinput/touchpadconfiglibinput.h b/kcms/touchpad/src/kcm/libinput/touchpadconfiglibinput.h deleted file mode 100644 --- a/kcms/touchpad/src/kcm/libinput/touchpadconfiglibinput.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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 TOUCHPADCONFIGLIBINPUT_H -#define TOUCHPADCONFIGLIBINPUT_H - -#include "../touchpadconfigplugin.h" - -class TouchpadBackend; -class QHideEvent; -class QQuickWidget; -class KMessageWidget; - -class TouchpadConfigLibinput : public TouchpadConfigPlugin -{ - Q_OBJECT - -public: - explicit TouchpadConfigLibinput(TouchpadConfigContainer *parent, - const QVariantList &args = QVariantList()); - virtual ~TouchpadConfigLibinput() {} - - void load() override; - void save() override; - void defaults() override; - - QSize sizeHint() const override; - QSize minimumSizeHint() const override; - - void hideEvent(QHideEvent *) override {} - -private Q_SLOTS: - void onChange(); - void onTouchpadAdded(bool success); - void onTouchpadRemoved(int index); - -private: - void hideErrorMessage(); - - QQuickWidget *m_view; - KMessageWidget *m_errorMessage; - - bool m_initError; -}; - -#endif // TOUCHPADCONFIGLIBINPUT_H diff --git a/kcms/touchpad/src/kcm/libinput/touchpadconfiglibinput.cpp b/kcms/touchpad/src/kcm/libinput/touchpadconfiglibinput.cpp deleted file mode 100644 --- a/kcms/touchpad/src/kcm/libinput/touchpadconfiglibinput.cpp +++ /dev/null @@ -1,221 +0,0 @@ -/* - * 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. - */ - -#include "touchpadconfiglibinput.h" - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include "../touchpadconfigcontainer.h" -#include "touchpadbackend.h" - -#include "version.h" - -TouchpadConfigLibinput::TouchpadConfigLibinput(TouchpadConfigContainer *parent, const QVariantList &args) - : TouchpadConfigPlugin(parent) -{ - KAboutData* data = new KAboutData(QStringLiteral("kcm_touchpad"), - i18n("Touchpad KCM"), - TOUCHPAD_KCM_VERSION, - i18n("System Settings module for managing your touchpad"), - KAboutLicense::GPL_V2, - i18n("Copyright © 2016 Roman Gilg"), - QString()); - - data->addAuthor(i18n("Roman Gilg"), - i18n("Developer"), - QStringLiteral("subdiff@gmail.com")); - - m_parent->setAboutData(data); - - m_backend = TouchpadBackend::implementation(); - m_initError = !m_backend->errorString().isNull(); - - m_view = new QQuickWidget(this); - - m_errorMessage = new KMessageWidget(this); - m_errorMessage->setCloseButtonVisible(false); - m_errorMessage->setWordWrap(true); - m_errorMessage->setVisible(false); - - QVBoxLayout *layout = new QVBoxLayout(parent); - - layout->addWidget(m_errorMessage); - layout->addWidget(m_view); - parent->setLayout(layout); - - m_view->setResizeMode(QQuickWidget::SizeRootObjectToView); - m_view->setClearColor(Qt::transparent); - m_view->setAttribute(Qt::WA_AlwaysStackOnTop); - - m_view->rootContext()->setContextProperty("backend", m_backend); - m_view->rootContext()->setContextProperty("deviceModel", QVariant::fromValue(m_backend->getDevices().toList())); - - KDeclarative::KDeclarative kdeclarative; - kdeclarative.setDeclarativeEngine(m_view->engine()); - kdeclarative.setupBindings(); - m_view->setSource(QUrl("qrc:/libinput/main.qml")); - - if (m_initError) { - m_errorMessage->setMessageType(KMessageWidget::Error); - m_errorMessage->setText(m_backend->errorString()); - QMetaObject::invokeMethod(m_errorMessage, "animatedShow", - Qt::QueuedConnection); - } else { - connect(m_backend, SIGNAL(touchpadAdded(bool)), this, SLOT(onTouchpadAdded(bool))); - connect(m_backend, SIGNAL(touchpadRemoved(int)), this, SLOT(onTouchpadRemoved(int))); - connect(m_view->rootObject(), SIGNAL(changeSignal()), this, SLOT(onChange())); - } - - m_view->show(); -} - -QSize TouchpadConfigLibinput::sizeHint() const -{ - return QQmlProperty::read(m_view->rootObject(), "sizeHint").toSize(); -} - -QSize TouchpadConfigLibinput::minimumSizeHint() const -{ - return QQmlProperty::read(m_view->rootObject(), "minimumSizeHint").toSize(); -} - -void TouchpadConfigLibinput::load() -{ - // in case of critical init error in backend, don't try - if (m_initError) { - return; - } - - if (!m_backend->getConfig()) { - m_errorMessage->setMessageType(KMessageWidget::Error); - m_errorMessage->setText(i18n("Error while loading values. See logs for more informations. Please restart this configuration module.")); - m_errorMessage->animatedShow(); - } else { - if (!m_backend->touchpadCount()) { - m_errorMessage->setMessageType(KMessageWidget::Information); - m_errorMessage->setText(i18n("No touchpad found. Connect touchpad now.")); - m_errorMessage->animatedShow(); - } - } - QMetaObject::invokeMethod(m_view->rootObject(), "syncValuesFromBackend"); -} - -void TouchpadConfigLibinput::save() -{ - if (!m_backend->applyConfig()) { - m_errorMessage->setMessageType(KMessageWidget::Error); - m_errorMessage->setText(i18n("Not able to save all changes. See logs for more informations. Please restart this configuration module and try again.")); - m_errorMessage->animatedShow(); - } else { - hideErrorMessage(); - } - // load newly written values - load(); - // in case of error, config still in changed state - emit m_parent->changed(m_backend->isChangedConfig()); -} - -void TouchpadConfigLibinput::defaults() -{ - // in case of critical init error in backend, don't try - if (m_initError) { - return; - } - - if (!m_backend->getDefaultConfig()) { - m_errorMessage->setMessageType(KMessageWidget::Error); - m_errorMessage->setText(i18n("Error while loading default values. Failed to set some options to their default values.")); - m_errorMessage->animatedShow(); - } - QMetaObject::invokeMethod(m_view->rootObject(), "syncValuesFromBackend"); - emit m_parent->changed(m_backend->isChangedConfig()); -} - -void TouchpadConfigLibinput::onChange() -{ - if (!m_backend->touchpadCount()) { - return; - } - hideErrorMessage(); - emit m_parent->changed(m_backend->isChangedConfig()); -} - -void TouchpadConfigLibinput::onTouchpadAdded(bool success) -{ - QQuickItem *rootObj = m_view->rootObject(); - - if (!success) { - m_errorMessage->setMessageType(KMessageWidget::Error); - m_errorMessage->setText(i18n("Error while adding newly connected device. Please reconnect it and restart this configuration module.")); - } - - int activeIndex; - if (m_backend->touchpadCount() == 1) { - // if no touchpad was connected previously, show the new device and hide the no-device-message - activeIndex = 0; - hideErrorMessage(); - } else { - activeIndex = QQmlProperty::read(rootObj, "deviceIndex").toInt(); - } - m_view->rootContext()->setContextProperty("deviceModel", QVariant::fromValue(m_backend->getDevices())); - QMetaObject::invokeMethod(rootObj, "resetModel", Q_ARG(QVariant, activeIndex)); - QMetaObject::invokeMethod(rootObj, "syncValuesFromBackend"); -} - -void TouchpadConfigLibinput::onTouchpadRemoved(int index) -{ - QQuickItem *rootObj = m_view->rootObject(); - - int activeIndex = QQmlProperty::read(rootObj, "deviceIndex").toInt(); - if (activeIndex == index) { - m_errorMessage->setMessageType(KMessageWidget::Information); - if (m_backend->touchpadCount()) { - m_errorMessage->setText(i18n("Touchpad disconnected. Closed its setting dialog.")); - } else { - m_errorMessage->setText(i18n("Touchpad disconnected. No other touchpads found.")); - } - m_errorMessage->animatedShow(); - activeIndex = 0; - } else { - if (index < activeIndex) { - activeIndex--; - } - } - m_view->rootContext()->setContextProperty("deviceModel", QVariant::fromValue(m_backend->getDevices())); - QMetaObject::invokeMethod(m_view->rootObject(), "resetModel", Q_ARG(QVariant, activeIndex)); - QMetaObject::invokeMethod(rootObj, "syncValuesFromBackend"); - - emit m_parent->changed(m_backend->isChangedConfig()); -} - -void TouchpadConfigLibinput::hideErrorMessage() -{ - if (m_errorMessage->isVisible()) { - m_errorMessage->animatedHide(); - } -} diff --git a/kcms/touchpad/src/kcm/resources.qrc b/kcms/touchpad/src/kcm/resources.qrc deleted file mode 100644 --- a/kcms/touchpad/src/kcm/resources.qrc +++ /dev/null @@ -1,5 +0,0 @@ - - - libinput/main.qml - - diff --git a/kcms/touchpad/src/kcm/touchpadconfigcontainer.h b/kcms/touchpad/src/kcm/touchpadconfigcontainer.h --- a/kcms/touchpad/src/kcm/touchpadconfigcontainer.h +++ b/kcms/touchpad/src/kcm/touchpadconfigcontainer.h @@ -22,15 +22,13 @@ #include class TouchpadConfigPlugin; -class TouchpadConfigLibinput; class TouchpadConfigXlib; class TouchpadConfigContainer : public KCModule { Q_OBJECT friend TouchpadConfigXlib; - friend TouchpadConfigLibinput; public: explicit TouchpadConfigContainer(QWidget *parent, diff --git a/kcms/touchpad/src/kcm/touchpadconfigcontainer.cpp b/kcms/touchpad/src/kcm/touchpadconfigcontainer.cpp --- a/kcms/touchpad/src/kcm/touchpadconfigcontainer.cpp +++ b/kcms/touchpad/src/kcm/touchpadconfigcontainer.cpp @@ -18,7 +18,6 @@ #include "touchpadconfigcontainer.h" #include "touchpadconfigplugin.h" -#include "kcm/libinput/touchpadconfiglibinput.h" #include "kcm/xlib/touchpadconfigxlib.h" #include @@ -38,8 +37,6 @@ { if (KWindowSystem::isPlatformX11()) { m_plugin = new TouchpadConfigXlib(this); - } else if (KWindowSystem::isPlatformWayland()) { - m_plugin = new TouchpadConfigLibinput(this); } } diff --git a/kcms/touchpad/src/touchpadbackend.cpp b/kcms/touchpad/src/touchpadbackend.cpp --- a/kcms/touchpad/src/touchpadbackend.cpp +++ b/kcms/touchpad/src/touchpadbackend.cpp @@ -20,7 +20,6 @@ #include "touchpadbackend.h" #include "backends/x11/xlibbackend.h" -#include "backends/kwin_wayland/kwinwaylandbackend.h" #include "logging.h" #include @@ -39,11 +38,6 @@ } return backend.localData().data(); } - // TODO: test on kwin_wayland specifically? What about possibly other compositors under Wayland? - else if (KWindowSystem::isPlatformWayland()) { - qCDebug(KCM_TOUCHPAD) << "Using KWin+Wayland backend"; - return (new KWinWaylandBackend()); - } else { qCCritical(KCM_TOUCHPAD) << "Not able to select appropriate backend."; return nullptr;