File indexing completed on 2024-05-12 17:07:30

0001 /*
0002     SPDX-FileCopyrightText: 2017 Roman Gilg <subdiff@gmail.com>
0003     SPDX-FileCopyrightText: 2013 Alexander Mezin <mezin.alexander@gmail.com>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "touchpadbackend.h"
0009 
0010 #include "backends/kwin_wayland/kwinwaylandbackend.h"
0011 #include "backends/x11/xlibbackend.h"
0012 #include "logging.h"
0013 #include "touchpadparameters.h"
0014 
0015 #include <QThreadStorage>
0016 
0017 #include <KWindowSystem>
0018 
0019 void touchpadApplySavedConfig()
0020 {
0021     TouchpadBackend *backend = TouchpadBackend::implementation();
0022     if (!backend) {
0023         return;
0024     }
0025 
0026     TouchpadParameters config;
0027     backend->applyConfig(config.values());
0028 }
0029 
0030 void TouchpadBackend::setMode(TouchpadInputBackendMode mode)
0031 {
0032     m_mode = mode;
0033 }
0034 
0035 TouchpadBackend *TouchpadBackend::implementation()
0036 {
0037     // There are multiple possible backends
0038     if (KWindowSystem::isPlatformX11()) {
0039         static QThreadStorage<std::shared_ptr<XlibBackend>> backend;
0040         if (!backend.hasLocalData()) {
0041             qCDebug(KCM_TOUCHPAD) << "Using X11 backend";
0042             backend.setLocalData(std::shared_ptr<XlibBackend>(XlibBackend::initialize()));
0043         }
0044         return backend.localData().get();
0045     }
0046     // TODO: test on kwin_wayland specifically? What about possibly other compositors under Wayland?
0047     else if (KWindowSystem::isPlatformWayland()) {
0048         qCDebug(KCM_TOUCHPAD) << "Using KWin+Wayland backend";
0049         return (new KWinWaylandBackend());
0050     } else {
0051         qCCritical(KCM_TOUCHPAD) << "Not able to select appropriate backend.";
0052         return nullptr;
0053     }
0054 }