File indexing completed on 2024-03-24 17:02:37
0001 /* 0002 SPDX-FileCopyrightText: 1999 Martin R. Jones <mjones@kde.org> 0003 SPDX-FileCopyrightText: 2002 Luboš Luňák <l.lunak@kde.org> 0004 SPDX-FileCopyrightText: 2003 Oswald Buddenhagen <ossi@kde.org> 0005 SPDX-FileCopyrightText: 2008 Chani Armitage <chanika@gmail.com> 0006 SPDX-FileCopyrightText: 2011 Martin Gräßlin <mgraesslin@kde.org> 0007 0008 SPDX-License-Identifier: GPL-2.0-or-later 0009 */ 0010 #pragma once 0011 0012 #include "abstractlocker.h" 0013 0014 #include <QAbstractNativeEventFilter> 0015 #include <X11/Xlib.h> 0016 #include <fixx11h.h> 0017 0018 namespace ScreenLocker 0019 { 0020 class AbstractLocker; 0021 0022 class X11Locker : public AbstractLocker, public QAbstractNativeEventFilter 0023 { 0024 Q_OBJECT 0025 public: 0026 explicit X11Locker(QObject *parent = nullptr); 0027 ~X11Locker() override; 0028 0029 void showLockWindow() override; 0030 void hideLockWindow() override; 0031 0032 void addAllowedWindow(quint32 window) override; 0033 0034 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) 0035 bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) override; 0036 #else 0037 bool nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result) override; 0038 #endif 0039 0040 private Q_SLOTS: 0041 void updateGeo(); 0042 0043 private: 0044 void initialize(); 0045 void saveVRoot(); 0046 void setVRoot(Window win, Window vr); 0047 void removeVRoot(Window win); 0048 int findWindowInfo(Window w); 0049 void fakeFocusIn(WId window); 0050 void stayOnTop() override; 0051 struct WindowInfo { 0052 Window window; 0053 bool viewable; 0054 }; 0055 QList<WindowInfo> m_windowInfo; 0056 QList<WId> m_lockWindows; 0057 QList<quint32> m_allowedWindows; 0058 WId m_focusedLockWindow; 0059 }; 0060 }