File indexing completed on 2024-05-05 05:39:01

0001 /*
0002     Registers as a embed container
0003     SPDX-FileCopyrightText: 2015 David Edmundson <davidedmundson@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.1-or-later
0006 */
0007 
0008 #pragma once
0009 
0010 #include <QAbstractNativeEventFilter>
0011 #include <QHash>
0012 #include <QObject>
0013 
0014 #include <xcb/xcb.h>
0015 
0016 class KSelectionOwner;
0017 class SNIProxy;
0018 
0019 class FdoSelectionManager : public QObject, public QAbstractNativeEventFilter
0020 {
0021     Q_OBJECT
0022 
0023 public:
0024     FdoSelectionManager();
0025     ~FdoSelectionManager() override;
0026 
0027 protected:
0028     bool nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result) override;
0029 
0030 private Q_SLOTS:
0031     void onClaimedOwnership();
0032     void onFailedToClaimOwnership();
0033     void onLostOwnership();
0034 
0035 private:
0036     void init();
0037     bool addDamageWatch(xcb_window_t client);
0038     void dock(xcb_window_t embed_win);
0039     void undock(xcb_window_t client);
0040     void setSystemTrayVisual();
0041 
0042     uint8_t m_damageEventBase;
0043 
0044     QHash<xcb_window_t, u_int32_t> m_damageWatches;
0045     QHash<xcb_window_t, SNIProxy *> m_proxies;
0046     KSelectionOwner *m_selectionOwner;
0047 };