diff options
author | Liang Qi <liang.qi@qt.io> | 2016-10-11 07:40:32 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-10-11 07:40:32 +0200 |
commit | 905329200f2f3f9372bf07a001371c30c0663684 (patch) | |
tree | e6f072ea693c377ae306b3960f4bde36ee20bc17 /src/platformsupport | |
parent | 91cde062968f97041bca8d2a30d13aa03b606c3d (diff) | |
parent | 1a78ef09b93b0a7337075555dc91032f39fab2a9 (diff) |
Merge remote-tracking branch 'origin/5.7' into 5.8
Conflicts:
src/gui/image/qpixmap.cpp
src/widgets/kernel/qformlayout.cpp
Change-Id: I8a8391a202adf7f18464a22ddf0a6c4974eab692
Diffstat (limited to 'src/platformsupport')
3 files changed, 16 insertions, 8 deletions
diff --git a/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection.cpp b/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection.cpp index 361146dc23..a9d758209a 100644 --- a/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection.cpp +++ b/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection.cpp @@ -95,6 +95,12 @@ bool QDBusMenuConnection::registerTrayIconMenu(QDBusTrayIcon *item) return success; } +void QDBusMenuConnection::unregisterTrayIconMenu(QDBusTrayIcon *item) +{ + if (item->menu()) + connection().unregisterObject(MenuBarPath); +} + bool QDBusMenuConnection::registerTrayIcon(QDBusTrayIcon *item) { bool success = connection().registerService(item->instanceId()); @@ -124,7 +130,7 @@ bool QDBusMenuConnection::registerTrayIcon(QDBusTrayIcon *item) bool QDBusMenuConnection::unregisterTrayIcon(QDBusTrayIcon *item) { - connection().unregisterObject(MenuBarPath); + unregisterTrayIconMenu(item); connection().unregisterObject(StatusNotifierItemPath); bool success = connection().unregisterService(item->instanceId()); if (!success) diff --git a/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h b/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h index 84eb2a6f3a..ae0595ae3b 100644 --- a/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h +++ b/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h @@ -72,6 +72,7 @@ public: bool isStatusNotifierHostRegistered() const { return m_statusNotifierHostRegistered; } #ifndef QT_NO_SYSTEMTRAYICON bool registerTrayIconMenu(QDBusTrayIcon *item); + void unregisterTrayIconMenu(QDBusTrayIcon *item); bool registerTrayIcon(QDBusTrayIcon *item); bool unregisterTrayIcon(QDBusTrayIcon *item); #endif // QT_NO_SYSTEMTRAYICON diff --git a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp index 95e9651e9a..a686a33464 100644 --- a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp +++ b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp @@ -214,20 +214,21 @@ QPlatformMenu *QDBusTrayIcon::createMenu() const void QDBusTrayIcon::updateMenu(QPlatformMenu * menu) { qCDebug(qLcTray) << menu; - bool needsRegistering = !m_menu; - if (!m_menu) - m_menu = qobject_cast<QDBusPlatformMenu *>(menu); - if (!m_menuAdaptor) { + QDBusPlatformMenu *newMenu = qobject_cast<QDBusPlatformMenu *>(menu); + if (m_menu != newMenu) { + if (m_menu) { + dBusConnection()->unregisterTrayIconMenu(this); + delete m_menuAdaptor; + } + m_menu = newMenu; m_menuAdaptor = new QDBusMenuAdaptor(m_menu); // TODO connect(m_menu, , m_menuAdaptor, SIGNAL(ItemActivationRequested(int,uint))); connect(m_menu, SIGNAL(propertiesUpdated(QDBusMenuItemList,QDBusMenuItemKeysList)), m_menuAdaptor, SIGNAL(ItemsPropertiesUpdated(QDBusMenuItemList,QDBusMenuItemKeysList))); connect(m_menu, SIGNAL(updated(uint,int)), m_menuAdaptor, SIGNAL(LayoutUpdated(uint,int))); - } - m_menu->emitUpdated(); - if (needsRegistering) dBusConnection()->registerTrayIconMenu(this); + } } void QDBusTrayIcon::showMessage(const QString &title, const QString &msg, const QIcon &icon, |