File indexing completed on 2024-04-14 05:21:20
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 bool nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result) override; 0035 0036 private Q_SLOTS: 0037 void updateGeo(); 0038 0039 private: 0040 void initialize(); 0041 void saveVRoot(); 0042 void setVRoot(Window win, Window vr); 0043 void removeVRoot(Window win); 0044 int findWindowInfo(Window w); 0045 void fakeFocusIn(WId window); 0046 void stayOnTop() override; 0047 struct WindowInfo { 0048 Window window; 0049 bool viewable; 0050 }; 0051 QList<WindowInfo> m_windowInfo; 0052 QList<WId> m_lockWindows; 0053 QList<quint32> m_allowedWindows; 0054 WId m_focusedLockWindow; 0055 }; 0056 }