Changeset View
Changeset View
Standalone View
Standalone View
libdbusmenuqt/dbusmenuimporter.cpp
Show First 20 Lines • Show All 404 Lines • ▼ Show 20 Line(s) | 379 | { | |||
---|---|---|---|---|---|
405 | QSet<int> newDBusMenuItemIds; | 405 | QSet<int> newDBusMenuItemIds; | ||
406 | newDBusMenuItemIds.reserve(rootItem.children.count()); | 406 | newDBusMenuItemIds.reserve(rootItem.children.count()); | ||
407 | for (const DBusMenuLayoutItem &item: rootItem.children) { | 407 | for (const DBusMenuLayoutItem &item: rootItem.children) { | ||
408 | newDBusMenuItemIds << item.id; | 408 | newDBusMenuItemIds << item.id; | ||
409 | } | 409 | } | ||
410 | for (QAction *action: menu->actions()) { | 410 | for (QAction *action: menu->actions()) { | ||
411 | int id = action->property(DBUSMENU_PROPERTY_ID).toInt(); | 411 | int id = action->property(DBUSMENU_PROPERTY_ID).toInt(); | ||
412 | if (! newDBusMenuItemIds.contains(id)) { | 412 | if (! newDBusMenuItemIds.contains(id)) { | ||
413 | menu->removeAction(action); | 413 | // Not calling removeAction() as QMenu will immediately close when it becomes empty, | ||
414 | // which can happen when an application completely reloads this menu. | ||||
415 | // When the action is deleted deferred, it is removed from the menu. | ||||
414 | action->deleteLater(); | 416 | action->deleteLater(); | ||
415 | d->m_actionForId.remove(id); | 417 | d->m_actionForId.remove(id); | ||
416 | } | 418 | } | ||
417 | } | 419 | } | ||
418 | 420 | | |||
419 | //insert or update new actions into our menu | 421 | //insert or update new actions into our menu | ||
420 | for (const DBusMenuLayoutItem &dbusMenuItem: rootItem.children) { | 422 | for (const DBusMenuLayoutItem &dbusMenuItem: rootItem.children) { | ||
421 | DBusMenuImporterPrivate::ActionForId::Iterator it = d->m_actionForId.find(dbusMenuItem.id); | 423 | DBusMenuImporterPrivate::ActionForId::Iterator it = d->m_actionForId.find(dbusMenuItem.id); | ||
▲ Show 20 Lines • Show All 124 Lines • Show Last 20 Lines |