From 509f77cca28aa3edea5523c5869bae4412ed2ccc Mon Sep 17 00:00:00 2001 From: Shawn Rutledge Date: Wed, 25 Mar 2015 13:33:39 +0100 Subject: D-Bus tray icon menus: support submenus MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/platformsupport/dbusmenu/qdbusmenutypes.cpp | 37 ++++++++++++++----------- 1 file changed, 21 insertions(+), 16 deletions(-) (limited to 'src/platformsupport/dbusmenu/qdbusmenutypes.cpp') 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(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) -- cgit v1.2.3