From 3f2e6bd31e0cd7355f95450cdc185e4d37ed2c16 Mon Sep 17 00:00:00 2001 From: Rajeesh K Nambiar Date: Sat, 27 Jun 2015 13:58:17 +0200 Subject: [PATCH] Fix touchpad backend initialization. Libinput driver, even when unistalled was leaving 'Libinput Tapping Enabled' atom active (xlsatoms | grep -i tap). Mutter/Clutter/Gtk+ were causing this, as noted in https://bugzilla.redhat.com/show_bug.cgi? id=1199825. This caused the non-existent libinput backend initialization resulting in 'No touchpad found' error even when synaptics driver was installed. Fix this by checking backend instantiation errors. BUG: 344958,349214 REVIEW: 124172 FIXED-IN: 5.4.0 --- kcms/touchpad/src/backends/x11/xlibbackend.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/kcms/touchpad/src/backends/x11/xlibbackend.cpp b/kcms/touchpad/src/backends/x11/xlibbackend.cpp index 2acb162..b55a45f 100644 --- a/kcms/touchpad/src/backends/x11/xlibbackend.cpp +++ b/kcms/touchpad/src/backends/x11/xlibbackend.cpp @@ -151,8 +151,10 @@ XlibSynapticsBackend::XlibSynapticsBackend(QObject *parent) : XlibBackend(parent) { m_capsAtom.intern(m_connection, SYNAPTICS_PROP_CAPABILITIES); - if (!m_capsAtom.atom()) + if (!m_capsAtom.atom()) { + m_errorString = i18nc("Synaptics touchpad driver","Synaptics backend not found"); return; + } m_device = findTouchpad(m_capsAtom); if (m_device == XIAllDevices) { @@ -275,8 +277,10 @@ XlibLibinputBackend::XlibLibinputBackend(QObject *parent) : "libinput Tapping Enabled", true); - if (!identifier.atom()) + if (!identifier.atom()) { + m_errorString = i18nc("Libinput touchpad driver","Libinput backend not found"); return; + } m_device = findTouchpad(identifier); if (m_device == XIAllDevices) { @@ -318,15 +322,17 @@ XlibLibinputBackend::XlibLibinputBackend(QObject *parent) : XlibBackend* XlibBackend::initialize(QObject *parent) { + XlibBackend* backend = nullptr; QScopedPointer display(XOpenDisplay(0)); xcb_connection_t *connection = XGetXCBConnection(display.data()); XcbAtom synaptics_prop_capablities, libinput_prop_tapping; - libinput_prop_tapping.intern(connection, "libinput Tapping Enabled"); - if (libinput_prop_tapping.atom()) - return new XlibLibinputBackend(parent); - else - return new XlibSynapticsBackend(parent); + backend = new XlibLibinputBackend(parent); + if (! backend->errorString().isNull()) { + delete backend; + backend = new XlibSynapticsBackend(parent); + } + return backend; } XlibBackend::~XlibBackend() -- 2.4.3