KWin
Loading...
Searching...
No Matches
scriptingutils.cpp
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 2012 Martin Gräßlin <mgraesslin@kde.org>
6
7 SPDX-License-Identifier: GPL-2.0-or-later
8*/
9#include "scriptingutils.h"
10#include "scripting_logging.h"
11
12#include <QDBusArgument>
13#include <QDBusObjectPath>
14#include <QDBusSignature>
15
16namespace KWin
17{
18
19QVariant dbusToVariant(const QVariant &variant)
20{
21 if (variant.canConvert<QDBusArgument>()) {
22 const QDBusArgument argument = variant.value<QDBusArgument>();
23 switch (argument.currentType()) {
24 case QDBusArgument::BasicType:
25 return dbusToVariant(argument.asVariant());
26 case QDBusArgument::VariantType:
27 return dbusToVariant(argument.asVariant().value<QDBusVariant>().variant());
28 case QDBusArgument::ArrayType: {
29 QVariantList array;
30 argument.beginArray();
31 while (!argument.atEnd()) {
32 const QVariant value = argument.asVariant();
33 array.append(dbusToVariant(value));
34 }
35 argument.endArray();
36 return array;
37 }
38 case QDBusArgument::StructureType: {
39 QVariantList structure;
40 argument.beginStructure();
41 while (!argument.atEnd()) {
42 const QVariant value = argument.asVariant();
43 structure.append(dbusToVariant(value));
44 }
45 argument.endStructure();
46 return structure;
47 }
48 case QDBusArgument::MapType: {
49 QVariantMap map;
50 argument.beginMap();
51 while (!argument.atEnd()) {
52 argument.beginMapEntry();
53 const QVariant key = argument.asVariant();
54 const QVariant value = argument.asVariant();
55 argument.endMapEntry();
56 map.insert(key.toString(), dbusToVariant(value));
57 }
58 argument.endMap();
59 return map;
60 }
61 default:
62 qCWarning(KWIN_SCRIPTING) << "Couldn't unwrap QDBusArgument of type" << argument.currentType();
63 return variant;
64 }
65 } else if (variant.canConvert<QDBusObjectPath>()) {
66 return variant.value<QDBusObjectPath>().path();
67 } else if (variant.canConvert<QDBusSignature>()) {
68 return variant.value<QDBusSignature>().signature();
69 } else if (variant.canConvert<QDBusVariant>()) {
70 return dbusToVariant(variant.value<QDBusVariant>().variant());
71 }
72
73 return variant;
74}
75
76}
QVariant dbusToVariant(const QVariant &variant)