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 @@ -20,6 +20,9 @@ #define LIBINPUTTOUCHPAD_H #include +#include +#include +#include #include "xlibtouchpad.h" #include "backends/libinputcommon.h" @@ -45,6 +48,9 @@ template QString valueWriter(const Prop &prop); + KSharedConfig *m_config; + KConfigGroup touchpadConfig; + // // 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 @@ -16,6 +16,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +#include +#include +#include +#include #include "libinputtouchpad.h" #include "logging.h" @@ -27,6 +31,30 @@ #include +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 +213,9 @@ m_tapFingerCount.avail = true; m_tapFingerCount.set(1); } + KSharedConfigPtr configPtr = KSharedConfig::openConfig(QStringLiteral("XlibinputConfigrc")); + m_config = configPtr.data(); + touchpadConfig = m_config->group(m_name); } bool LibinputTouchpad::getConfig() @@ -379,9 +410,20 @@ prop.avail = true; T replyValue = valueLoaderPart(reply); + T savedValue = touchpadConfig.readEntry(QString(prop.name), replyValue); + + if (replyValue!=savedValue) { + replyValue = savedValue; + } + else { + prop.old = replyValue; + } - prop.old = replyValue; prop.val = replyValue; + if (configProps.contains(QString(prop.name))) { + touchpadConfig.writeEntry(QString(prop.name), replyValue); + touchpadConfig.config()->sync(); + } return true; } @@ -399,5 +441,7 @@ qCCritical(KCM_TOUCHPAD) << "Cannot set property " + QString::fromAscii(prop.name); return QStringLiteral("Cannot set property ") + QString::fromAscii(prop.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,18 @@ } } +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();