diff options
-rw-r--r-- | qobject/qdict.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/qobject/qdict.c b/qobject/qdict.c index 60d6cd5a0e..17e14f08b1 100644 --- a/qobject/qdict.c +++ b/qobject/qdict.c @@ -494,16 +494,20 @@ static void qdict_do_flatten(QDict *qdict, QDict *target, const char *prefix) delete = false; if (prefix) { - qobject_incref(value); new_key = g_strdup_printf("%s.%s", prefix, entry->key); - qdict_put_obj(target, new_key, value); - delete = true; } if (qobject_type(value) == QTYPE_QDICT) { + /* Entries of QDicts are processed recursively, the QDict object + * itself disappears. */ qdict_do_flatten(qobject_to_qdict(value), target, new_key ? new_key : entry->key); delete = true; + } else if (prefix) { + /* All other objects are moved to the target unchanged. */ + qobject_incref(value); + qdict_put_obj(target, new_key, value); + delete = true; } g_free(new_key); |