File indexing completed on 2025-01-12 03:40:51

0001 /* This file is part of the dbusmenu-qt library
0002    SPDX-FileCopyrightText: 2009 Canonical
0003    Author: 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 #include "debug_p.h"
0012 
0013 // Qt
0014 #include <QDBusArgument>
0015 #include <QDBusMetaType>
0016 
0017 //// DBusMenuItem
0018 QDBusArgument &operator<<(QDBusArgument &argument, const DBusMenuItem &obj)
0019 {
0020     argument.beginStructure();
0021     argument << obj.id << obj.properties;
0022     argument.endStructure();
0023     return argument;
0024 }
0025 
0026 const QDBusArgument &operator>>(const QDBusArgument &argument, DBusMenuItem &obj)
0027 {
0028     argument.beginStructure();
0029     argument >> obj.id >> obj.properties;
0030     argument.endStructure();
0031     return argument;
0032 }
0033 
0034 //// DBusMenuItemKeys
0035 QDBusArgument &operator<<(QDBusArgument &argument, const DBusMenuItemKeys &obj)
0036 {
0037     argument.beginStructure();
0038     argument << obj.id << obj.properties;
0039     argument.endStructure();
0040     return argument;
0041 }
0042 
0043 const QDBusArgument &operator>>(const QDBusArgument &argument, DBusMenuItemKeys &obj)
0044 {
0045     argument.beginStructure();
0046     argument >> obj.id >> obj.properties;
0047     argument.endStructure();
0048     return argument;
0049 }
0050 
0051 //// DBusMenuLayoutItem
0052 QDBusArgument &operator<<(QDBusArgument &argument, const DBusMenuLayoutItem &obj)
0053 {
0054     argument.beginStructure();
0055     argument << obj.id << obj.properties;
0056     argument.beginArray(qMetaTypeId<QDBusVariant>());
0057     const auto childrens = obj.children;
0058     for (const DBusMenuLayoutItem &child : childrens) {
0059         argument << QDBusVariant(QVariant::fromValue<DBusMenuLayoutItem>(child));
0060     }
0061     argument.endArray();
0062     argument.endStructure();
0063     return argument;
0064 }
0065 
0066 const QDBusArgument &operator>>(const QDBusArgument &argument, DBusMenuLayoutItem &obj)
0067 {
0068     argument.beginStructure();
0069     argument >> obj.id >> obj.properties;
0070     argument.beginArray();
0071     while (!argument.atEnd()) {
0072         QDBusVariant dbusVariant;
0073         argument >> dbusVariant;
0074         QDBusArgument childArgument = dbusVariant.variant().value<QDBusArgument>();
0075 
0076         DBusMenuLayoutItem child;
0077         childArgument >> child;
0078         obj.children.append(child);
0079     }
0080     argument.endArray();
0081     argument.endStructure();
0082     return argument;
0083 }
0084 
0085 void DBusMenuTypes_register()
0086 {
0087     static bool registered = false;
0088     if (registered) {
0089         return;
0090     }
0091     qDBusRegisterMetaType<DBusMenuItem>();
0092     qDBusRegisterMetaType<DBusMenuItemList>();
0093     qDBusRegisterMetaType<DBusMenuItemKeys>();
0094     qDBusRegisterMetaType<DBusMenuItemKeysList>();
0095     qDBusRegisterMetaType<DBusMenuLayoutItem>();
0096     qDBusRegisterMetaType<DBusMenuLayoutItemList>();
0097     qDBusRegisterMetaType<DBusMenuShortcut>();
0098     registered = true;
0099 }