Don't own unique name for QDBusTrayIcon
Flatpak doesn't allow to own random name with PID. Even after adding such a permission into manifest, all flatpaked apps have PID 2, so only one Qt application at a time can have tray icon. Even though unique name is a part of the spec, no tray hosts really check it and SNI implementations without unique name run just fine inside and outside of Flatpak. This fixes the inability of Qt applications to have tray icon in Flatpak outside of KDE. Change-Id: Ieea6dc335b7a74537a51929f6e70ca68c84228fb Reviewed-by: Dmitry Shachnev <mitya57@gmail.com> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> (cherry picked from commit 9db7cc79a26ced4997277b5c206ca15949133240) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
b4580e9ea9
commit
e066c4d4bf
@ -106,13 +106,7 @@ void QDBusMenuConnection::unregisterTrayIconMenu(QDBusTrayIcon *item)
|
||||
|
||||
bool QDBusMenuConnection::registerTrayIcon(QDBusTrayIcon *item)
|
||||
{
|
||||
bool success = connection().registerService(item->instanceId());
|
||||
if (!success) {
|
||||
qWarning() << "failed to register service" << item->instanceId();
|
||||
return false;
|
||||
}
|
||||
|
||||
success = connection().registerObject(StatusNotifierItemPath, item);
|
||||
bool success = connection().registerObject(StatusNotifierItemPath, item);
|
||||
if (!success) {
|
||||
unregisterTrayIcon(item);
|
||||
qWarning() << "failed to register" << item->instanceId() << StatusNotifierItemPath;
|
||||
@ -127,21 +121,18 @@ bool QDBusMenuConnection::registerTrayIcon(QDBusTrayIcon *item)
|
||||
|
||||
bool QDBusMenuConnection::registerTrayIconWithWatcher(QDBusTrayIcon *item)
|
||||
{
|
||||
Q_UNUSED(item);
|
||||
QDBusMessage registerMethod = QDBusMessage::createMethodCall(
|
||||
StatusNotifierWatcherService, StatusNotifierWatcherPath, StatusNotifierWatcherService,
|
||||
QLatin1String("RegisterStatusNotifierItem"));
|
||||
registerMethod.setArguments(QVariantList() << item->instanceId());
|
||||
registerMethod.setArguments(QVariantList() << m_connection.baseService());
|
||||
return m_connection.callWithCallback(registerMethod, this, SIGNAL(trayIconRegistered()), SLOT(dbusError(QDBusError)));
|
||||
}
|
||||
|
||||
bool QDBusMenuConnection::unregisterTrayIcon(QDBusTrayIcon *item)
|
||||
void QDBusMenuConnection::unregisterTrayIcon(QDBusTrayIcon *item)
|
||||
{
|
||||
unregisterTrayIconMenu(item);
|
||||
connection().unregisterObject(StatusNotifierItemPath);
|
||||
bool success = connection().unregisterService(item->instanceId());
|
||||
if (!success)
|
||||
qWarning() << "failed to unregister service" << item->instanceId();
|
||||
return success;
|
||||
}
|
||||
#endif // QT_NO_SYSTEMTRAYICON
|
||||
|
||||
|
@ -79,7 +79,7 @@ public:
|
||||
void unregisterTrayIconMenu(QDBusTrayIcon *item);
|
||||
bool registerTrayIcon(QDBusTrayIcon *item);
|
||||
bool registerTrayIconWithWatcher(QDBusTrayIcon *item);
|
||||
bool unregisterTrayIcon(QDBusTrayIcon *item);
|
||||
void unregisterTrayIcon(QDBusTrayIcon *item);
|
||||
#endif // QT_NO_SYSTEMTRAYICON
|
||||
|
||||
Q_SIGNALS:
|
||||
|
Loading…
x
Reference in New Issue
Block a user