diff options
author | Shawn Rutledge <shawn.rutledge@digia.com> | 2015-03-25 13:33:39 +0100 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@theqtcompany.com> | 2015-03-30 22:01:16 +0000 |
commit | 509f77cca28aa3edea5523c5869bae4412ed2ccc (patch) | |
tree | 0a2c30d7d95e109659b26ca8c305c96e3a7e6722 /src/platformsupport/dbusmenu/qdbusmenutypes.cpp | |
parent | ffc74e6d7031015b18b4b9a695b13e25a325979a (diff) |
D-Bus tray icon menus: support submenus
In this case GetLayout will be called with the D-Bus menu ID of the
menu item which contains the submenu.
Task-number: QTBUG-45191
Change-Id: Ia8108272910eac10f040db5865ec4e070da80edb
Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
Diffstat (limited to 'src/platformsupport/dbusmenu/qdbusmenutypes.cpp')
-rw-r--r-- | src/platformsupport/dbusmenu/qdbusmenutypes.cpp | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/src/platformsupport/dbusmenu/qdbusmenutypes.cpp b/src/platformsupport/dbusmenu/qdbusmenutypes.cpp index cacc9817de..73957eacfe 100644 --- a/src/platformsupport/dbusmenu/qdbusmenutypes.cpp +++ b/src/platformsupport/dbusmenu/qdbusmenutypes.cpp @@ -87,26 +87,32 @@ uint QDBusMenuLayoutItem::populate(int id, int depth, const QStringList &propert m_properties.insert(QLatin1String("children-display"), QLatin1String("submenu")); Q_FOREACH (const QDBusPlatformMenu *menu, QDBusPlatformMenu::topLevelMenus()) { if (menu) - Q_FOREACH (const QDBusPlatformMenuItem *item, menu->items()) { - QDBusMenuLayoutItem child; - child.populate(item, depth - 1, propertyNames); - m_children << child; - } + populate(menu, depth, propertyNames); } - } else { - // TODO insert menu properties (name-value pairs) + return 1; // revision } - QDBusPlatformMenu *menu = QDBusPlatformMenu::byId(id); - if (depth != 0 && menu) { - Q_FOREACH (QDBusPlatformMenuItem *item, menu->items()) { - QDBusMenuLayoutItem child; - child.populate(item, depth - 1, propertyNames); - m_children << child; - } + + const QDBusPlatformMenu *menu = QDBusPlatformMenu::byId(id); + if (!menu) { + QDBusPlatformMenuItem *item = QDBusPlatformMenuItem::byId(id); + if (item) + menu = static_cast<const QDBusPlatformMenu *>(item->menu()); } + if (depth != 0 && menu) + populate(menu, depth, propertyNames); if (menu) return menu->revision(); - return 1; + + return 1; // revision +} + +void QDBusMenuLayoutItem::populate(const QDBusPlatformMenu *menu, int depth, const QStringList &propertyNames) +{ + Q_FOREACH (QDBusPlatformMenuItem *item, menu->items()) { + QDBusMenuLayoutItem child; + child.populate(item, depth - 1, propertyNames); + m_children << child; + } } void QDBusMenuLayoutItem::populate(const QDBusPlatformMenuItem *item, int depth, const QStringList &propertyNames) @@ -116,7 +122,6 @@ void QDBusMenuLayoutItem::populate(const QDBusPlatformMenuItem *item, int depth, m_id = item->dbusID(); QDBusMenuItem proxy(item); m_properties = proxy.m_properties; - // TODO populate m_children } const QDBusArgument &operator<<(QDBusArgument &arg, const QDBusMenuLayoutItem &item) |