refs #450 CVariant has to work around the fact that QtDBus can't marshal an invalid QVariant.

This commit is contained in:
Mathew Sutcliffe
2015-09-19 22:23:57 +01:00
parent 3b79688618
commit 0e2f8f51ba

View File

@@ -205,9 +205,16 @@ namespace BlackMisc
} }
void CVariant::marshallToDbus(QDBusArgument &arg) const void CVariant::marshallToDbus(QDBusArgument &arg) const
{
if (isValid())
{ {
arg << QString(typeName()) << QDBusVariant(getQVariant()); arg << QString(typeName()) << QDBusVariant(getQVariant());
} }
else
{
arg << QString() << QDBusVariant(QVariant(0));
}
}
void CVariant::unmarshallFromDbus(const QDBusArgument &arg) void CVariant::unmarshallFromDbus(const QDBusArgument &arg)
{ {
@@ -215,8 +222,15 @@ namespace BlackMisc
QDBusVariant dbusVar; QDBusVariant dbusVar;
arg >> typeName >> dbusVar; arg >> typeName >> dbusVar;
if (typeName.isEmpty())
{
*this = CVariant();
}
else
{
*this = fixQVariantFromDbusArgument(dbusVar.variant(), QMetaType::type(qPrintable(typeName))); *this = fixQVariantFromDbusArgument(dbusVar.variant(), QMetaType::type(qPrintable(typeName)));
} }
}
void CVariant::setPropertyByIndex(const CVariant &variant, const CPropertyIndex &index) void CVariant::setPropertyByIndex(const CVariant &variant, const CPropertyIndex &index)
{ {