File indexing completed on 2024-05-05 05:37:32

0001 /*
0002     SPDX-FileCopyrightText: 2011 Lionel Chauvin <megabigbug@yahoo.fr>
0003     SPDX-FileCopyrightText: 2011, 2012 Cédric Bellegarde <gnumdk@gmail.com>
0004     SPDX-FileCopyrightText: 2016 Kai Uwe Broulik <kde@privat.broulik.de>
0005 
0006     SPDX-License-Identifier: MIT
0007 */
0008 
0009 #pragma once
0010 
0011 // Qt
0012 #include <QDBusArgument>
0013 #include <QDBusContext>
0014 #include <QDBusObjectPath>
0015 #include <QObject>
0016 #include <QWidget> // For WId
0017 
0018 class QDBusServiceWatcher;
0019 
0020 class MenuImporter : public QObject, protected QDBusContext
0021 {
0022     Q_OBJECT
0023 
0024 public:
0025     explicit MenuImporter(QObject *);
0026     ~MenuImporter() override;
0027 
0028     bool connectToBus();
0029 
0030     bool serviceExist(WId id)
0031     {
0032         return m_menuServices.contains(id);
0033     }
0034     QString serviceForWindow(WId id)
0035     {
0036         return m_menuServices.value(id);
0037     }
0038 
0039     bool pathExist(WId id)
0040     {
0041         return m_menuPaths.contains(id);
0042     }
0043     QString pathForWindow(WId id)
0044     {
0045         return m_menuPaths.value(id).path();
0046     }
0047 
0048     QList<WId> ids()
0049     {
0050         return m_menuServices.keys();
0051     }
0052 
0053 Q_SIGNALS:
0054     void WindowRegistered(WId id, const QString &service, const QDBusObjectPath &);
0055     void WindowUnregistered(WId id);
0056 
0057 public Q_SLOTS:
0058     Q_NOREPLY void RegisterWindow(WId id, const QDBusObjectPath &path);
0059     Q_NOREPLY void UnregisterWindow(WId id);
0060     QString GetMenuForWindow(WId id, QDBusObjectPath &path);
0061 
0062 private Q_SLOTS:
0063     void slotServiceUnregistered(const QString &service);
0064 
0065 private:
0066     QDBusServiceWatcher *m_serviceWatcher;
0067     QHash<WId, QString> m_menuServices;
0068     QHash<WId, QDBusObjectPath> m_menuPaths;
0069     QHash<WId, QString> m_windowClasses;
0070 };