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 }