From 9d250d7be8b1799b4f3602bb69cb96aa398eaf38 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sun, 5 Jul 2015 22:43:08 +0200 Subject: platformsupport/dbusmenu: fix uses of inefficient QLists These types are larger than a void*, so holding them in QLists is needlessly inefficient. Worse, the code could come to depend on the fragile property of (inefficient) QLists that references to elements therein never are invalidated. Fix by marking them movable, and holding in a QVector instead. Change-Id: I74b2ce327d6aee60e2cc3463ce09453a4305bba7 Reviewed-by: Dmitry Shachnev Reviewed-by: Thiago Macieira --- src/platformsupport/dbusmenu/qdbusmenutypes_p.h | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/platformsupport/dbusmenu/qdbusmenutypes_p.h b/src/platformsupport/dbusmenu/qdbusmenutypes_p.h index 28d16b32d5..8dae75281c 100644 --- a/src/platformsupport/dbusmenu/qdbusmenutypes_p.h +++ b/src/platformsupport/dbusmenu/qdbusmenutypes_p.h @@ -46,7 +46,7 @@ QT_BEGIN_NAMESPACE class QDBusPlatformMenu; class QDBusPlatformMenuItem; class QDBusMenuItem; -typedef QList QDBusMenuItemList; +typedef QVector QDBusMenuItemList; class QDBusMenuItem { @@ -61,6 +61,7 @@ public: int m_id; QVariantMap m_properties; }; +Q_DECLARE_TYPEINFO(QDBusMenuItem, Q_MOVABLE_TYPE); const QDBusArgument &operator<<(QDBusArgument &arg, const QDBusMenuItem &item); const QDBusArgument &operator>>(const QDBusArgument &arg, QDBusMenuItem &item); @@ -72,11 +73,12 @@ public: int id; QStringList properties; }; +Q_DECLARE_TYPEINFO(QDBusMenuItemKeys, Q_MOVABLE_TYPE); const QDBusArgument &operator<<(QDBusArgument &arg, const QDBusMenuItemKeys &keys); const QDBusArgument &operator>>(const QDBusArgument &arg, QDBusMenuItemKeys &keys); -typedef QList QDBusMenuItemKeysList; +typedef QVector QDBusMenuItemKeysList; class QDBusMenuLayoutItem { @@ -87,13 +89,14 @@ public: int m_id; QVariantMap m_properties; - QList m_children; + QVector m_children; }; +Q_DECLARE_TYPEINFO(QDBusMenuLayoutItem, Q_MOVABLE_TYPE); const QDBusArgument &operator<<(QDBusArgument &arg, const QDBusMenuLayoutItem &); const QDBusArgument &operator>>(const QDBusArgument &arg, QDBusMenuLayoutItem &item); -typedef QList QDBusMenuLayoutItemList; +typedef QVector QDBusMenuLayoutItemList; class QDBusMenuEvent { @@ -103,11 +106,13 @@ public: QDBusVariant m_data; uint m_timestamp; }; +Q_DECLARE_TYPEINFO(QDBusMenuEvent, Q_MOVABLE_TYPE); // QDBusVariant is movable, even though it cannot + // be marked as such until Qt 6. const QDBusArgument &operator<<(QDBusArgument &arg, const QDBusMenuEvent &ev); const QDBusArgument &operator>>(const QDBusArgument &arg, QDBusMenuEvent &ev); -typedef QList QDBusMenuEventList; +typedef QVector QDBusMenuEventList; #ifndef QT_NO_DEBUG_STREAM QDebug operator<<(QDebug d, const QDBusMenuItem &item); -- cgit v1.2.3