Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qstatusnotifieritemadaptor.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5/*
6 This file was originally created by qdbusxml2cpp version 0.8
7 Command line was:
8 qdbusxml2cpp -a statusnotifieritem ../../3rdparty/dbus-ifaces/org.kde.StatusNotifierItem.xml
9
10 However it is maintained manually, because this adapter needs to do
11 significant interface adaptation, and can do it more efficiently using the
12 QDBusTrayIcon API directly rather than via QObject::property() and
13 QMetaObject::invokeMethod().
14*/
15
17
18#ifndef QT_NO_SYSTEMTRAYICON
19
20#include <QtCore/QLoggingCategory>
21#include <QtCore/QCoreApplication>
22
24
26
27Q_DECLARE_LOGGING_CATEGORY(qLcMenu)
28Q_DECLARE_LOGGING_CATEGORY(qLcTray)
29
30QStatusNotifierItemAdaptor::QStatusNotifierItemAdaptor(QDBusTrayIcon *parent)
31 : QDBusAbstractAdaptor(parent), m_trayIcon(parent)
32{
33 setAutoRelaySignals(true);
34}
35
39
40QString QStatusNotifierItemAdaptor::attentionIconName() const
41{
42 return m_trayIcon->attentionIconName();
43}
44
45QXdgDBusImageVector QStatusNotifierItemAdaptor::attentionIconPixmap() const
46{
47 return iconToQXdgDBusImageVector(m_trayIcon->attentionIcon());
48}
49
50QString QStatusNotifierItemAdaptor::attentionMovieName() const
51{
52 return QString();
53}
54
55QString QStatusNotifierItemAdaptor::category() const
56{
57 return m_trayIcon->category();
58}
59
60QString QStatusNotifierItemAdaptor::iconName() const
61{
62 return m_trayIcon->iconName();
63}
64
65QXdgDBusImageVector QStatusNotifierItemAdaptor::iconPixmap() const
66{
67 return iconToQXdgDBusImageVector(m_trayIcon->icon());
68}
69
70QString QStatusNotifierItemAdaptor::id() const
71{
72 // from the API docs: "a name that should be unique for this application and
73 // consistent between sessions, such as the application name itself"
74 return QCoreApplication::applicationName();
75}
76
77bool QStatusNotifierItemAdaptor::itemIsMenu() const
78{
79 // From KDE docs: if this is true, the item only supports the context menu,
80 // so the visualization should prefer sending ContextMenu() instead of Activate().
81 // But QSystemTrayIcon doesn't have such a setting: it will emit activated()
82 // and the application is free to use it or ignore it; we don't know whether it will.
83 return false;
84}
85
86QDBusObjectPath QStatusNotifierItemAdaptor::menu() const
87{
88 return QDBusObjectPath(m_trayIcon->menu() ? "/MenuBar" : "/NO_DBUSMENU");
89}
90
91QString QStatusNotifierItemAdaptor::overlayIconName() const
92{
93 return QString();
94}
95
96QXdgDBusImageVector QStatusNotifierItemAdaptor::overlayIconPixmap() const
97{
98 QXdgDBusImageVector ret; // empty vector
99 return ret;
100}
101
102QString QStatusNotifierItemAdaptor::status() const
103{
104 return m_trayIcon->status();
105}
106
107QString QStatusNotifierItemAdaptor::title() const
108{
109 // Shown e.g. when the icon is hidden, in the popup showing all hidden items.
110 // Since QSystemTrayIcon doesn't have this property, the application name
111 // is the best information we have available.
112 return QCoreApplication::applicationName();
113}
114
115QXdgDBusToolTipStruct QStatusNotifierItemAdaptor::toolTip() const
116{
117 QXdgDBusToolTipStruct ret;
118 if (m_trayIcon->isRequestingAttention()) {
119 ret.title = m_trayIcon->attentionTitle();
120 ret.subTitle = m_trayIcon->attentionMessage();
121 ret.icon = m_trayIcon->attentionIconName();
122 } else {
123 ret.title = m_trayIcon->tooltip();
124 }
125 return ret;
126}
127
128void QStatusNotifierItemAdaptor::Activate(int x, int y)
129{
130 qCDebug(qLcTray) << x << y;
131 emit m_trayIcon->activated(QPlatformSystemTrayIcon::Trigger);
132}
133
135{
136 qCDebug(qLcTray) << x << y;
137 emit m_trayIcon->activated(QPlatformSystemTrayIcon::Context);
138}
139
141{
142 qCDebug(qLcTray) << token;
143 qputenv("XDG_ACTIVATION_TOKEN", token.toUtf8());
144}
145
146void QStatusNotifierItemAdaptor::Scroll(int w, const QString &s)
147{
148 qCDebug(qLcTray) << w << s;
149 // unsupported
150}
151
153{
154 qCDebug(qLcTray) << x << y;
155 emit m_trayIcon->activated(QPlatformSystemTrayIcon::MiddleClick);
156}
157
158QT_END_NAMESPACE
159
160#include "moc_qstatusnotifieritemadaptor_p.cpp"
161
162#endif // QT_NO_SYSTEMTRAYICON
bool isRequestingAttention() const
QDBusPlatformMenu * menu()
virtual Q_CLASSINFO("D-Bus Introspection", "" " <interface name=\"org.kde.StatusNotifierItem\">\n" " <property access=\"read\" type=\"s\" name=\"Category\"/>\n" " <property access=\"read\" type=\"s\" name=\"Id\"/>\n" " <property access=\"read\" type=\"s\" name=\"Title\"/>\n" " <property access=\"read\" type=\"s\" name=\"Status\"/>\n" " <property access=\"read\" type=\"i\" name=\"WindowId\"/>\n" " <property access=\"read\" type=\"s\" name=\"IconThemePath\"/>\n" " <property access=\"read\" type=\"o\" name=\"Menu\"/>\n" " <property access=\"read\" type=\"b\" name=\"ItemIsMenu\"/>\n" " <property access=\"read\" type=\"s\" name=\"IconName\"/>\n" " <property access=\"read\" type=\"a(iiay)\" name=\"IconPixmap\">\n" " <annotation value=\"QXdgDBusImageVector\" name=\"org.qtproject.QtDBus.QtTypeName\"/>\n" " </property>\n" " <property access=\"read\" type=\"s\" name=\"OverlayIconName\"/>\n" " <property access=\"read\" type=\"a(iiay)\" name=\"OverlayIconPixmap\">\n" " <annotation value=\"QXdgDBusImageVector\" name=\"org.qtproject.QtDBus.QtTypeName\"/>\n" " </property>\n" " <property access=\"read\" type=\"s\" name=\"AttentionIconName\"/>\n" " <property access=\"read\" type=\"a(iiay)\" name=\"AttentionIconPixmap\">\n" " <annotation value=\"QXdgDBusImageVector\" name=\"org.qtproject.QtDBus.QtTypeName\"/>\n" " </property>\n" " <property access=\"read\" type=\"s\" name=\"AttentionMovieName\"/>\n" " <property access=\"read\" type=\"(sa(iiay)ss)\" name=\"ToolTip\">\n" " <annotation value=\"QXdgDBusToolTipStruct\" name=\"org.qtproject.QtDBus.QtTypeName\"/>\n" " </property>\n" " <method name=\"ProvideXdgActivationToken\">\n" " <arg name=\"token\" type=\"s\" direction=\"in\"/>\n" " </method>\n" " <method name=\"ContextMenu\">\n" " <arg direction=\"in\" type=\"i\" name=\"x\"/>\n" " <arg direction=\"in\" type=\"i\" name=\"y\"/>\n" " </method>\n" " <method name=\"Activate\">\n" " <arg direction=\"in\" type=\"i\" name=\"x\"/>\n" " <arg direction=\"in\" type=\"i\" name=\"y\"/>\n" " </method>\n" " <method name=\"SecondaryActivate\">\n" " <arg direction=\"in\" type=\"i\" name=\"x\"/>\n" " <arg direction=\"in\" type=\"i\" name=\"y\"/>\n" " </method>\n" " <method name=\"Scroll\">\n" " <arg direction=\"in\" type=\"i\" name=\"delta\"/>\n" " <arg direction=\"in\" type=\"s\" name=\"orientation\"/>\n" " </method>\n" " <signal name=\"NewTitle\"/>\n" " <signal name=\"NewIcon\"/>\n" " <signal name=\"NewAttentionIcon\"/>\n" " <signal name=\"NewOverlayIcon\"/>\n" " <signal name=\"NewMenu\"/>\n" " <signal name=\"NewToolTip\"/>\n" " <signal name=\"NewStatus\">\n" " <arg type=\"s\" name=\"status\"/>\n" " </signal>\n" " </interface>\n" "") public ~QStatusNotifierItemAdaptor()
void ProvideXdgActivationToken(const QString &token)
void Scroll(int delta, const QString &orientation)