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 }