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 }