File indexing completed on 2024-05-12 05:35:53

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 #if BUILD_KCM_TOUCHPAD_KWIN_WAYLAND
0011 #include "backends/kwin_wayland/kwinwaylandbackend.h"
0012 #endif
0013 #if BUILD_KCM_TOUCHPAD_X11
0014 #include "backends/x11/xlibbackend.h"
0015 #endif
0016 
0017 #include "logging.h"
0018 #include "touchpadparameters.h"
0019 
0020 #include <QThreadStorage>
0021 
0022 #include <KWindowSystem>
0023 
0024 void touchpadApplySavedConfig()
0025 {
0026     TouchpadBackend *backend = TouchpadBackend::implementation();
0027     if (!backend) {
0028         return;
0029     }
0030 
0031     TouchpadParameters config;
0032     backend->applyConfig(config.values());
0033 }
0034 
0035 void TouchpadBackend::setMode(TouchpadInputBackendMode mode)
0036 {
0037     m_mode = mode;
0038 }
0039 
0040 TouchpadBackend *TouchpadBackend::implementation()
0041 {
0042     // There are multiple possible backends
0043 #if BUILD_KCM_TOUCHPAD_X11
0044     if (KWindowSystem::isPlatformX11()) {
0045         static QThreadStorage<std::shared_ptr<XlibBackend>> backend;
0046         if (!backend.hasLocalData()) {
0047             qCDebug(KCM_TOUCHPAD) << "Using X11 backend";
0048             backend.setLocalData(std::shared_ptr<XlibBackend>(XlibBackend::initialize()));
0049         }
0050         return backend.localData().get();
0051     }
0052 #endif
0053 #if BUILD_KCM_TOUCHPAD_KWIN_WAYLAND
0054     // TODO: test on kwin_wayland specifically? What about possibly other compositors under Wayland?
0055     if (KWindowSystem::isPlatformWayland()) {
0056         static QThreadStorage<std::shared_ptr<KWinWaylandBackend>> backend;
0057         if (!backend.hasLocalData()) {
0058             qCDebug(KCM_TOUCHPAD) << "Using KWin+Wayland backend";
0059             backend.setLocalData(std::shared_ptr<KWinWaylandBackend>(new KWinWaylandBackend()));
0060         }
0061         return backend.localData().get();
0062     }
0063 #endif
0064 
0065     qCCritical(KCM_TOUCHPAD) << "Not able to select appropriate backend.";
0066     return nullptr;
0067 }