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 }