qdbustrayicon.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/platformsupport/dbustray/qdbustrayicon.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6-
7-
8const QLoggingCategory &qLcTray() { static const QLoggingCategory category("qt.qpa.tray"); return category; }-
9-
10static const QString KDEItemFormat = ([]() -> QString { enum { Size = sizeof(u"" "org.kde.StatusNotifierItem-%1-%2")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeof(QStringData) }, u"" "org.kde.StatusNotifierItem-%1-%2" }; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); return qstring_literal_temp; }());-
11static const QString KDEWatcherService = ([]() -> QString { enum { Size = sizeof(u"" "org.kde.StatusNotifierWatcher")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeof(QStringData) }, u"" "org.kde.StatusNotifierWatcher" }; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); return qstring_literal_temp; }());-
12static const QString TempFileTemplate = QDir::tempPath() + ([]() -> QString { enum { Size = sizeof(u"" "/qt-trayicon-XXXXXX.png")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeofQLatin1String(QStringData) }, u"" "/qt-trayicon-XXXXXX.png"}; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder);-
return qstring_literal_temp; }());static const QString XdgNotificationService = ([]() -> QString { enum { Size = sizeof(u"" "org.freedesktop.Notifications")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeof(QStringData) }, u"" "org.freedesktop.Notifications" }; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); return qstring_literal_temp; }());
14static const QString XdgNotificationPath = ([]() -> QString { enum { Size = sizeof(u"" "/org/freedesktop/Notifications")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeof(QStringData) }, u"" "/org/freedesktop/Notifications" }; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); return qstring_literal_temp; }());-
15static const QString DefaultAction = ([]() -> QString { enum { Size = sizeof(u"" "default")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeof(QStringData) }, u"" "default" }; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); return qstring_literal_temp; }());-
16static int instanceCount = 0;-
17-
18-
19-
20-
21-
22-
23QDBusTrayIcon::QDBusTrayIcon()-
24 : m_dbusConnection(nullptr)-
25 , m_adaptor(new QStatusNotifierItemAdaptor(this))-
26 , m_menuAdaptor(nullptr)-
27 , m_menu(nullptr)-
28 , m_notifier(nullptr)-
29 , m_instanceId(KDEItemFormat.arg(QCoreApplication::applicationPid()).arg(++instanceCount))-
30 , m_category(([]() -> QString { enum { Size = sizeof(u"" "ApplicationStatus")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeof(QStringData) }, u"" "ApplicationStatus" }; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); return qstring_literal_temp; }()))-
31 , m_defaultStatus(([]() -> QString { enum { Size = sizeof(u"" "Active")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeof(QStringData) }, u"" "Active" }; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); return qstring_literal_temp; }()))-
32 , m_status(m_defaultStatus)-
33 , m_tempIcon(nullptr)-
34 , m_tempAttentionIcon(nullptr)-
35 , m_registered(false)-
36{-
37 for (bool qt_category_enabled = qLcTray().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 8894, __PRETTY_FUNCTION__, qLcTray().categoryName()).debug();-
38 if (instanceCount == 1) {-
39 QDBusMenuItem::registerDBusTypes();-
40 qDBusRegisterMetaType<QXdgDBusImageStruct>();-
41 qDBusRegisterMetaType<QXdgDBusImageVector>();-
42 qDBusRegisterMetaType<QXdgDBusToolTipStruct>();-
43 }-
44 connect(this, qFlagLocation("2""statusChanged(QString)" "\0" __FILE__ ":" "95""101"), m_adaptor, qFlagLocation("2""NewStatus(QString)" "\0" __FILE__ ":" "95""101"));-
45 connect(this, qFlagLocation("2""tooltipChanged()" "\0" __FILE__ ":" "96""102"), m_adaptor, qFlagLocation("2""NewToolTip()" "\0" __FILE__ ":" "96""102"));-
46 connect(this, qFlagLocation("2""iconChanged()" "\0" __FILE__ ":" "97""103"), m_adaptor, qFlagLocation("2""NewIcon()" "\0" __FILE__ ":" "97""103"));-
47 connect(this, qFlagLocation("2""attention()" "\0" __FILE__ ":" "98""104"), m_adaptor, qFlagLocation("2""NewAttentionIcon()" "\0" __FILE__ ":" "98""104"));-
48 connect(this, qFlagLocation("2""attention()" "\0" __FILE__ ":" "99""105"), m_adaptor, qFlagLocation("2""NewTitle()" "\0" __FILE__ ":" "99""105"));-
49 connect(&m_attentionTimer, qFlagLocation("2""timeout()" "\0" __FILE__ ":" "100""106"), this, qFlagLocation("1""attentionTimerExpired()" "\0" __FILE__ ":" "100""106"));-
50 m_attentionTimer.setSingleShot(true);-
51}-
52-
53QDBusTrayIcon::~QDBusTrayIcon()-
54{-
55}-
56-
57void QDBusTrayIcon::init()-
58{-
59 for (bool qt_category_enabled = qLcTray().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 110116, __PRETTY_FUNCTION__, qLcTray().categoryName()).debug() << "registering" << m_instanceId;-
60 m_registered = dBusConnection()->registerTrayIcon(this);-
61}-
62-
63void QDBusTrayIcon::cleanup()-
64{-
65 for (bool qt_category_enabled = qLcTray().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 116122, __PRETTY_FUNCTION__, qLcTray().categoryName()).debug() << "unregistering" << m_instanceId;-
66 if (m_registered)-
67 dBusConnection()->unregisterTrayIcon(this);-
68 delete m_dbusConnection;-
69 m_dbusConnection = nullptr;-
70 delete m_notifier;-
71 m_notifier = nullptr;-
72 m_registered = false;-
73}-
74-
75void QDBusTrayIcon::attentionTimerExpired()-
76{-
77 m_messageTitle = QString();-
78 m_message = QString();-
79 m_attentionIcon = QIcon();-
80 attention();-
81 tooltipChanged();-
82 setStatus(m_defaultStatus);-
83}-
84-
85void QDBusTrayIcon::setStatus(const QString &status)-
86{-
87 for (bool qt_category_enabled = qLcTray().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 138144, __PRETTY_FUNCTION__, qLcTray().categoryName()).debug() << status;-
88 if (m_status == status)-
89 return;-
90 m_status = status;-
91 statusChanged(m_status);-
92}-
93-
94QTemporaryFile *QDBusTrayIcon::tempIcon(const QIcon &icon)-
95{-
96-
97-
98 static bool necessity_checked = false;-
99 static bool necessary = false;-
100 if (!necessity_checked
!necessity_checkedDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
101 QDBusConnection session = QDBusConnection::sessionBus();-
102 uint pid = session.interface()->servicePid(KDEWatcherService).value();-
103 QString processName = QLockFilePrivate::processNameByPid(pid);-
104 necessary = processName.endsWith(([]() -> QString { enum { Size = sizeof(u"" "indicator-application-service")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeofQLatin1String(QStringData) }, u"" "indicator-application-service"}; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); return qstring_literal_temp; }()));));-
105 necessity_checked = true;-
106 }
never executed: end of block
0
107 if (!necessary
!necessaryDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
108 return
never executed: return nullptr;
nullptr;
never executed: return nullptr;
0
109 qreal dpr = (static_cast<QGuiApplication *>(QCoreApplication::instance()))->devicePixelRatio();-
110 QTemporaryFile *ret = new QTemporaryFile(TempFileTemplate, this);-
111 ret->open();-
112 icon.pixmap(QSize(22 * dpr, 22 * dpr)).save(ret);-
113 ret->close();-
114 return
never executed: return ret;
ret;
never executed: return ret;
0
115}-
116-
117QDBusMenuConnection * QDBusTrayIcon::dBusConnection()-
118{-
119 if (!m_dbusConnection) {-
120 m_dbusConnection = new QDBusMenuConnection(this, m_instanceId);-
121 m_notifier = new QXdgNotificationInterface(XdgNotificationService,-
122 XdgNotificationPath, m_dbusConnection->connection(), this);-
123 connect(m_notifier, qFlagLocation("2""NotificationClosed(uint,uint)" "\0" __FILE__ ":" "173""180"), this, qFlagLocation("1""notificationClosed(uint,uint)" "\0" __FILE__ ":" "173""180"));-
124 connect(m_notifier, qFlagLocation("2""ActionInvoked(uint,QString)" "\0" __FILE__ ":" "174""181"), this, qFlagLocation("1""actionInvoked(uint,QString)" "\0" __FILE__ ":" "174""181"));-
125 }-
126 return m_dbusConnection;-
127}-
128-
129void QDBusTrayIcon::updateIcon(const QIcon &icon)-
130{-
131 m_iconName = icon.name();-
132 m_icon = icon;-
133 if (m_iconName.isEmpty()) {-
134 if (m_tempIcon)-
135 delete m_tempIcon;-
136 m_tempIcon = tempIcon(icon);-
137 if (m_tempIcon)-
138 m_iconName = m_tempIcon->fileName();-
139 }-
140 for (bool qt_category_enabled = qLcTray().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 190197, __PRETTY_FUNCTION__, qLcTray().categoryName()).debug() << m_iconName << icon.availableSizes();-
141 iconChanged();-
142}-
143-
144void QDBusTrayIcon::updateToolTip(const QString &tooltip)-
145{-
146 for (bool qt_category_enabled = qLcTray().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 196203, __PRETTY_FUNCTION__, qLcTray().categoryName()).debug() << tooltip;-
147 m_tooltip = tooltip;-
148 tooltipChanged();-
149}-
150-
151QPlatformMenu *QDBusTrayIcon::createMenu() const-
152{-
153 return new QDBusPlatformMenu();-
154}-
155-
156void QDBusTrayIcon::updateMenu(QPlatformMenu * menu)-
157{-
158 for (bool qt_category_enabled = qLcTray().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 208215, __PRETTY_FUNCTION__, qLcTray().categoryName()).debug() << menu;-
159 QDBusPlatformMenu *newMenu = qobject_cast<QDBusPlatformMenu *>(menu);-
160 if (m_menu != newMenu) {-
161 if (m_menu) {-
162 dBusConnection()->unregisterTrayIconMenu(this);-
163 delete m_menuAdaptor;-
164 }-
165 m_menu = newMenu;-
166 m_menuAdaptor = new QDBusMenuAdaptor(m_menu);-
167-
168 connect(m_menu, qFlagLocation("2""propertiesUpdated(QDBusMenuItemList,QDBusMenuItemKeysList)" "\0" __FILE__ ":" "218""225"),-
169 m_menuAdaptor, qFlagLocation("2""ItemsPropertiesUpdated(QDBusMenuItemList,QDBusMenuItemKeysList)" "\0" __FILE__ ":" "219""226"));-
170 connect(m_menu, qFlagLocation("2""updated(uint,int)" "\0" __FILE__ ":" "220""227"),-
171 m_menuAdaptor, qFlagLocation("2""LayoutUpdated(uint,int)" "\0" __FILE__ ":" "221""228"));-
172 dBusConnection()->registerTrayIconMenu(this);-
173 }-
174}-
175-
176void QDBusTrayIcon::showMessage(const QString &title, const QString &msg, const QIcon &icon,-
177 QPlatformSystemTrayIcon::MessageIcon iconType, int msecs)-
178{-
179 m_messageTitle = title;-
180 m_message = msg;-
181 m_attentionIcon = icon;-
182 QStringList notificationActions;-
183 switch (iconType) {-
184 case Information:-
185 m_attentionIconName = ([]() -> QString { enum { Size = sizeof(u"" "dialog-information")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeof(QStringData) }, u"" "dialog-information" }; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); return qstring_literal_temp; }());-
186 break;-
187 case Warning:-
188 m_attentionIconName = ([]() -> QString { enum { Size = sizeof(u"" "dialog-warning")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeof(QStringData) }, u"" "dialog-warning" }; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); return qstring_literal_temp; }());-
189 break;-
190 case Critical:-
191 m_attentionIconName = ([]() -> QString { enum { Size = sizeof(u"" "dialog-error")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeof(QStringData) }, u"" "dialog-error" }; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); return qstring_literal_temp; }());-
192-
193-
194-
195 notificationActions << DefaultAction << tr("OK");-
196 break;-
197 default:-
198 m_attentionIconName.clear();-
199 break;-
200 }-
201 if (m_attentionIconName.isEmpty()) {-
202 if (m_tempAttentionIcon)-
203 delete m_tempAttentionIcon;-
204 m_tempAttentionIcon = tempIcon(icon);-
205 if (m_tempAttentionIcon)-
206 m_attentionIconName = m_tempAttentionIcon->fileName();-
207 }-
208 for (bool qt_category_enabled = qLcTray().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 258265, __PRETTY_FUNCTION__, qLcTray().categoryName()).debug() << title << msg <<-
209 QPlatformSystemTrayIcon::metaObject()->enumerator(-
210 QPlatformSystemTrayIcon::staticMetaObject.indexOfEnumerator("MessageIcon")).valueToKey(iconType)-
211 << m_attentionIconName << msecs;-
212 setStatus(([]() -> QString { enum { Size = sizeof(u"" "NeedsAttention")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeof(QStringData) }, u"" "NeedsAttention" }; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); return qstring_literal_temp; }()));-
213 m_attentionTimer.start(msecs);-
214 tooltipChanged();-
215 attention();-
216-
217-
218 QVariantMap hints;-
219-
220-
221 int urgency = static_cast<int>(iconType) - 1;-
222 if (urgency < 0)-
223 urgency = 0;-
224 hints.insert(QLatin1String("urgency"), QVariant(urgency));-
225 m_notifier->notify(QCoreApplication::applicationName(), 0,-
226 m_attentionIconName, title, msg, notificationActions, hints, msecs);-
227}-
228-
229void QDBusTrayIcon::actionInvoked(uint id, const QString &action)-
230{-
231 for (bool qt_category_enabled = qLcTray().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 281288, __PRETTY_FUNCTION__, qLcTray().categoryName()).debug() << id << action;-
232 messageClicked();-
233}-
234-
235void QDBusTrayIcon::notificationClosed(uint id, uint reason)-
236{-
237 for (bool qt_category_enabled = qLcTray().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 287294, __PRETTY_FUNCTION__, qLcTray().categoryName()).debug() << id << reason;-
238}-
239-
240bool QDBusTrayIcon::isSystemTrayAvailable() const-
241{-
242 QDBusMenuConnection * conn = const_cast<QDBusTrayIcon *>(this)->dBusConnection();-
243 for (bool qt_category_enabled = qLcTray().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 293300, __PRETTY_FUNCTION__, qLcTray().categoryName()).debug() << conn->isStatusNotifierHostRegistered();-
244 return conn->isStatusNotifierHostRegistered();-
245}-
246-
247-
Switch to Source codePreprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9