File indexing completed on 2024-05-12 17:08:50

0001 /*
0002     SPDX-FileCopyrightText: 2009 Marco Martin <notmart@gmail.com>
0003     SPDX-FileCopyrightText: 2009 Matthieu Gallien <matthieu_gallien@yahoo.fr>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #pragma once
0009 
0010 #include <Plasma/DataContainer>
0011 #include <QDBusPendingCallWatcher>
0012 #include <QMenu>
0013 #include <QString>
0014 
0015 #include "statusnotifieritem_interface.h"
0016 
0017 class DBusMenuImporter;
0018 class KIconLoader;
0019 
0020 class StatusNotifierItemSource : public QObject
0021 {
0022     Q_OBJECT
0023 
0024 public:
0025     StatusNotifierItemSource(const QString &service, QObject *parent);
0026     ~StatusNotifierItemSource() override;
0027     Plasma::Service *createService();
0028 
0029     void activate(int x, int y);
0030     void secondaryActivate(int x, int y);
0031     void scroll(int delta, const QString &direction);
0032     void contextMenu(int x, int y);
0033     void provideXdgActivationToken(const QString &token);
0034 
0035     QIcon attentionIcon() const;
0036     QString attentionIconName() const;
0037     QString attentionMovieName() const;
0038     QString category() const;
0039     QIcon icon() const;
0040     QString iconName() const;
0041     QString iconThemePath() const;
0042     QString id() const;
0043     bool itemIsMenu() const;
0044     QString overlayIconName() const;
0045     QString status() const;
0046     QString title() const;
0047     QVariant toolTipIcon() const;
0048     QString toolTipSubTitle() const;
0049     QString toolTipTitle() const;
0050     QString windowId() const;
0051 
0052 Q_SIGNALS:
0053     void contextMenuReady(QMenu *menu);
0054     void activateResult(bool success);
0055     void dataUpdated();
0056 
0057 private Q_SLOTS:
0058     void contextMenuReady();
0059     void refreshMenu();
0060     void refresh();
0061     void performRefresh();
0062     void syncStatus(const QString &);
0063     void refreshCallback(QDBusPendingCallWatcher *);
0064     void activateCallback(QDBusPendingCallWatcher *);
0065 
0066 private:
0067     QPixmap KDbusImageStructToPixmap(const KDbusImageStruct &image) const;
0068     QIcon imageVectorToPixmap(const KDbusImageVector &vector) const;
0069     void overlayIcon(QIcon *icon, QIcon *overlay);
0070     KIconLoader *iconLoader() const;
0071 
0072     bool m_valid;
0073     QString m_servicename;
0074     QTimer m_refreshTimer;
0075     KIconLoader *m_customIconLoader;
0076     DBusMenuImporter *m_menuImporter;
0077     org::kde::StatusNotifierItem *m_statusNotifierItemInterface;
0078     bool m_refreshing : 1;
0079     bool m_needsReRefreshing : 1;
0080 
0081     QIcon m_attentionIcon;
0082     QString m_attentionIconName;
0083     QString m_attentionMovieName;
0084     QString m_category;
0085     QIcon m_icon;
0086     QString m_iconName;
0087     QString m_iconThemePath;
0088     QString m_id;
0089     bool m_itemIsMenu;
0090     QString m_overlayIconName;
0091     QString m_status;
0092     QString m_title;
0093     QVariant m_toolTipIcon;
0094     QString m_toolTipSubTitle;
0095     QString m_toolTipTitle;
0096     QString m_windowId;
0097 };