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 @@ -39,7 +39,7 @@ bool isChangedConfig() override; int touchpadOff() override; - XcbAtom &touchpadOffAtom() override; + bool isTouchpadOffAtom(const xcb_atom_t &atom) override; private: 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 @@ -371,9 +371,13 @@ return m_enabled.val; } -XcbAtom &LibinputTouchpad::touchpadOffAtom() +bool LibinputTouchpad::isTouchpadOffAtom(const xcb_atom_t &atom) { - return *m_atoms[QLatin1Literal("enabled")].data(); + auto it = m_atoms.constFind(QLatin1Literal("enabled")); + if (it == m_atoms.constEnd()) + return false; + + return (*it)->atom() == atom; } template diff --git a/kcms/touchpad/src/backends/x11/synapticstouchpad.h b/kcms/touchpad/src/backends/x11/synapticstouchpad.h --- a/kcms/touchpad/src/backends/x11/synapticstouchpad.h +++ b/kcms/touchpad/src/backends/x11/synapticstouchpad.h @@ -32,7 +32,7 @@ void setTouchpadOff(int touchpadOff) override; int touchpadOff() override; - XcbAtom &touchpadOffAtom() override; + bool isTouchpadOffAtom(const xcb_atom_t &atom) override; protected: double getPropertyScale(const QString &name) const override; diff --git a/kcms/touchpad/src/backends/x11/synapticstouchpad.cpp b/kcms/touchpad/src/backends/x11/synapticstouchpad.cpp --- a/kcms/touchpad/src/backends/x11/synapticstouchpad.cpp +++ b/kcms/touchpad/src/backends/x11/synapticstouchpad.cpp @@ -252,9 +252,9 @@ return off.value(0).toInt(); } -XcbAtom &SynapticsTouchpad::touchpadOffAtom() +bool SynapticsTouchpad::isTouchpadOffAtom(const xcb_atom_t &atom) { - return m_touchpadOffAtom; + return m_touchpadOffAtom.atom() == atom; } double SynapticsTouchpad::getPropertyScale(const QString &name) const diff --git a/kcms/touchpad/src/backends/x11/xcbatom.h b/kcms/touchpad/src/backends/x11/xcbatom.h --- a/kcms/touchpad/src/backends/x11/xcbatom.h +++ b/kcms/touchpad/src/backends/x11/xcbatom.h @@ -39,7 +39,7 @@ xcb_connection_t *m_connection; xcb_intern_atom_cookie_t m_cookie; xcb_intern_atom_reply_t *m_reply; - bool m_fetched; + mutable bool m_fetched; }; #endif // XCBATOM_H diff --git a/kcms/touchpad/src/backends/x11/xlibbackend.cpp b/kcms/touchpad/src/backends/x11/xlibbackend.cpp --- a/kcms/touchpad/src/backends/x11/xlibbackend.cpp +++ b/kcms/touchpad/src/backends/x11/xlibbackend.cpp @@ -314,7 +314,7 @@ void XlibBackend::propertyChanged(xcb_atom_t prop) { - if ((m_device && prop == m_device->touchpadOffAtom().atom()) || + if ((m_device && m_device->isTouchpadOffAtom(prop)) || prop == m_enabledAtom.atom()) { Q_EMIT touchpadStateChanged(); diff --git a/kcms/touchpad/src/backends/x11/xlibtouchpad.h b/kcms/touchpad/src/backends/x11/xlibtouchpad.h --- a/kcms/touchpad/src/backends/x11/xlibtouchpad.h +++ b/kcms/touchpad/src/backends/x11/xlibtouchpad.h @@ -63,7 +63,7 @@ virtual void setTouchpadOff(int touchpadOff) {} virtual int touchpadOff() = 0; - virtual XcbAtom &touchpadOffAtom() = 0; + virtual bool isTouchpadOffAtom(const xcb_atom_t &atom) = 0; protected: void loadSupportedProperties(const Parameter *props);