File indexing completed on 2024-04-28 05:35:32

0001 /* This file is part of the dbusmenu-qt library
0002     SPDX-FileCopyrightText: 2009 Canonical
0003     SPDX-FileContributor: Aurelien Gateau <aurelien.gateau@canonical.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 #include "dbusmenutypes_p.h"
0008 
0009 // Local
0010 #include "dbusmenushortcut_p.h"
0011 
0012 // Qt
0013 #include <QDBusArgument>
0014 #include <QDBusMetaType>
0015 
0016 //// DBusMenuItem
0017 QDBusArgument &operator<<(QDBusArgument &argument, const DBusMenuItem &obj)
0018 {
0019     argument.beginStructure();
0020     argument << obj.id << obj.properties;
0021     argument.endStructure();
0022     return argument;
0023 }
0024 
0025 const QDBusArgument &operator>>(const QDBusArgument &argument, DBusMenuItem &obj)
0026 {
0027     argument.beginStructure();
0028     argument >> obj.id >> obj.properties;
0029     argument.endStructure();
0030     return argument;
0031 }
0032 
0033 //// DBusMenuItemKeys
0034 QDBusArgument &operator<<(QDBusArgument &argument, const DBusMenuItemKeys &obj)
0035 {
0036     argument.beginStructure();
0037     argument << obj.id << obj.properties;
0038     argument.endStructure();
0039     return argument;
0040 }
0041 
0042 const QDBusArgument &operator>>(const QDBusArgument &argument, DBusMenuItemKeys &obj)
0043 {
0044     argument.beginStructure();
0045     argument >> obj.id >> obj.properties;
0046     argument.endStructure();
0047     return argument;
0048 }
0049 
0050 //// DBusMenuLayoutItem
0051 QDBusArgument &operator<<(QDBusArgument &argument, const DBusMenuLayoutItem &obj)
0052 {
0053     argument.beginStructure();
0054     argument << obj.id << obj.properties;
0055     argument.beginArray(qMetaTypeId<QDBusVariant>());
0056     Q_FOREACH (const DBusMenuLayoutItem &child, obj.children) {
0057         argument << QDBusVariant(QVariant::fromValue<DBusMenuLayoutItem>(child));
0058     }
0059     argument.endArray();
0060     argument.endStructure();
0061     return argument;
0062 }
0063 
0064 const QDBusArgument &operator>>(const QDBusArgument &argument, DBusMenuLayoutItem &obj)
0065 {
0066     argument.beginStructure();
0067     argument >> obj.id >> obj.properties;
0068     argument.beginArray();
0069     while (!argument.atEnd()) {
0070         QDBusVariant dbusVariant;
0071         argument >> dbusVariant;
0072         QDBusArgument childArgument = dbusVariant.variant().value<QDBusArgument>();
0073 
0074         DBusMenuLayoutItem child;
0075         childArgument >> child;
0076         obj.children.append(child);
0077     }
0078     argument.endArray();
0079     argument.endStructure();
0080     return argument;
0081 }
0082 
0083 //// DBusMenuShortcut
0084 QDBusArgument &operator<<(QDBusArgument &argument, const DBusMenuShortcut &obj)
0085 {
0086     argument.beginArray(qMetaTypeId<QStringList>());
0087     typename QList<QStringList>::ConstIterator it = obj.constBegin();
0088     typename QList<QStringList>::ConstIterator end = obj.constEnd();
0089     for (; it != end; ++it)
0090         argument << *it;
0091     argument.endArray();
0092     return argument;
0093 }
0094 
0095 const QDBusArgument &operator>>(const QDBusArgument &argument, DBusMenuShortcut &obj)
0096 {
0097     argument.beginArray();
0098     obj.clear();
0099     while (!argument.atEnd()) {
0100         QStringList item;
0101         argument >> item;
0102         obj.push_back(item);
0103     }
0104     argument.endArray();
0105     return argument;
0106 }
0107 
0108 void DBusMenuTypes_register()
0109 {
0110     static bool registered = false;
0111     if (registered) {
0112         return;
0113     }
0114     qDBusRegisterMetaType<DBusMenuItem>();
0115     qDBusRegisterMetaType<DBusMenuItemList>();
0116     qDBusRegisterMetaType<DBusMenuItemKeys>();
0117     qDBusRegisterMetaType<DBusMenuItemKeysList>();
0118     qDBusRegisterMetaType<DBusMenuLayoutItem>();
0119     qDBusRegisterMetaType<DBusMenuLayoutItemList>();
0120     qDBusRegisterMetaType<DBusMenuShortcut>();
0121     registered = true;
0122 }