diff --git a/kcms/touchpad/src/backends/x11/libinputtouchpad.h b/kcms/touchpad/src/backends/x11/libinputtouchpad.h --- a/kcms/touchpad/src/backends/x11/libinputtouchpad.h +++ b/kcms/touchpad/src/backends/x11/libinputtouchpad.h @@ -19,11 +19,12 @@ #ifndef LIBINPUTTOUCHPAD_H #define LIBINPUTTOUCHPAD_H -#include - #include "xlibtouchpad.h" #include "backends/libinputcommon.h" +#include +#include + class LibinputTouchpad : public LibinputCommon, public XlibTouchpad { Q_OBJECT @@ -45,6 +46,8 @@ template QString valueWriter(const Prop &prop); + KSharedConfigPtr m_config; + // // general QString name() const override { diff --git a/kcms/touchpad/src/backends/x11/libinputtouchpad.cpp b/kcms/touchpad/src/backends/x11/libinputtouchpad.cpp --- a/kcms/touchpad/src/backends/x11/libinputtouchpad.cpp +++ b/kcms/touchpad/src/backends/x11/libinputtouchpad.cpp @@ -19,14 +19,40 @@ #include "libinputtouchpad.h" #include "logging.h" +#include + #include #include #include #include #include +static const QSet configProps = { + QStringLiteral("enabled"), + QStringLiteral("disableWhileTyping"), + QStringLiteral("disableEventsOnExternalMouse"), + QStringLiteral("leftHanded"), + QStringLiteral("middleEmulation"), + QStringLiteral("pointerAcceleration"), + QStringLiteral("pointerAccelerationProfileFlat"), + QStringLiteral("pointerAccelerationProfileAdaptive"), + QStringLiteral("tapToClick"), + QStringLiteral("tapAndDrag"), + QStringLiteral("tapDragLock"), + QStringLiteral("lrmTapButtonMap"), + QStringLiteral("lmrTapButtonMap"), + QStringLiteral("scrollTwoFinger"), + QStringLiteral("scrollOnButtonDown"), + QStringLiteral("scrollButton"), + QStringLiteral("scrollEdge"), + QStringLiteral("naturalScroll"), + QStringLiteral("horizontalScrolling"), + QStringLiteral("clickMethodAreas"), + QStringLiteral("clickMethodClickfinger") +}; + const Parameter libinputProperties[] = { /* libinput disable supports property */ @@ -185,6 +211,7 @@ m_tapFingerCount.avail = true; m_tapFingerCount.set(1); } + m_config = KSharedConfig::openConfig(QStringLiteral("touchpadxlibinputrc")); } bool LibinputTouchpad::getConfig() @@ -378,10 +405,13 @@ } prop.avail = true; - T replyValue = valueLoaderPart(reply); + auto touchpadConfig = m_config->group(m_name); + const T replyValue = valueLoaderPart(reply); + const T loadedValue = touchpadConfig.readEntry(QString(prop.name), replyValue); prop.old = replyValue; - prop.val = replyValue; + prop.val = loadedValue; + return true; } @@ -399,5 +429,8 @@ qCCritical(KCM_TOUCHPAD) << "Cannot set property " + QString::fromAscii(prop.name); return QStringLiteral("Cannot set property ") + QString::fromAscii(prop.name); } + auto touchpadConfig = m_config->group(m_name); + touchpadConfig.writeEntry(QString(prop.name), prop.val); + touchpadConfig.config()->sync(); return QString(); } 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 @@ -36,6 +36,8 @@ explicit TouchpadConfigContainer(QWidget *parent, const QVariantList &args = QVariantList()); + static void kcmInit(); + QSize minimumSizeHint() const override; QSize sizeHint() const override; void resizeEvent(QResizeEvent *event) override; 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 @@ -29,7 +29,7 @@ Q_DECL_EXPORT void kcminit_touchpad() { if (KWindowSystem::isPlatformX11()) { - TouchpadConfigXlib::kcmInit(); + TouchpadConfigContainer::kcmInit(); } } } @@ -50,6 +50,17 @@ } } +void TouchpadConfigContainer::kcmInit() +{ + TouchpadBackend *backend = TouchpadBackend::implementation(); + if (backend->getMode() == TouchpadInputBackendMode::XLibinput) { + backend->getConfig(); + backend->applyConfig(); + } else if (backend->getMode() == TouchpadInputBackendMode::XSynaptics) { + TouchpadConfigXlib::kcmInit(); + } +} + QSize TouchpadConfigContainer::minimumSizeHint() const { return m_plugin->minimumSizeHint();