984
990
priv->dbusobject,
985
991
DBUSMENU_INTERFACE,
986
"ItemPropertiesUpdated",
992
"ItemsPropertiesUpdated",
987
993
g_variant_new_tuple(megadata, 2),
990
g_variant_unref(megadata[0]);
991
g_variant_unref(megadata[1]);
997
g_variant_unref(megadata[0]);
998
g_variant_unref(megadata[1]);
994
1000
/* Clean everything up */
995
1001
prop_array_teardown(priv->prop_array);
996
1002
priv->prop_array = NULL;
1191
1197
DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server);
1194
gint parent = g_variant_get_int32(g_variant_get_child_value(params, 0));
1195
gint recurse = g_variant_get_int32(g_variant_get_child_value(params, 1));
1196
const gchar ** props = g_variant_get_strv(g_variant_get_child_value(params, 2), NULL);
1202
const gchar ** props;
1204
g_variant_get(params, "(ii^a&s)", &parent, &recurse, &props);
1199
1207
guint revision = priv->layout_revision;
1252
1261
"There currently isn't a layout in this server");
1256
gint id = g_variant_get_int32(g_variant_get_child_value(params, 0));
1257
const gchar * property = g_variant_get_string(g_variant_get_child_value(params, 1), NULL);
1266
const gchar * property;
1268
g_variant_get(params, "(i&s)", &id, &property);
1259
1270
DbusmenuMenuitem * mi = dbusmenu_menuitem_find_id(priv->root, id);
1299
gint id = g_variant_get_int32(g_variant_get_child_value(params, 0));
1311
g_variant_get(params, "(i)", &id);
1301
1313
DbusmenuMenuitem * mi = dbusmenu_menuitem_find_id(priv->root, id);
1324
1336
DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server);
1326
1338
if (priv->root == NULL) {
1339
/* Allow a request for just id 0 when root is null. Return no properties.
1340
So that a request always returns a valid structure no matter the
1341
state of the structure in the server.
1327
1343
GVariant * idlist = g_variant_get_child_value(params, 0);
1328
if (g_variant_n_children(idlist) == 1 && g_variant_get_int32(g_variant_get_child_value(idlist, 0)) == 0) {
1329
GVariant * final = g_variant_parse(g_variant_type_new("(a(ia{sv}))"), "([(0, {})],)", NULL, NULL, NULL);
1330
g_dbus_method_invocation_return_value(invocation, final);
1344
if (g_variant_n_children(idlist) == 1) {
1346
GVariant *id_v = g_variant_get_child_value(idlist, 0);
1347
gint32 id = g_variant_get_int32(id_v);
1348
g_variant_unref(id_v);
1352
GVariant * final = g_variant_parse(G_VARIANT_TYPE("(a(ia{sv}))"), "([(0, {})],)", NULL, NULL, NULL);
1353
g_dbus_method_invocation_return_value(invocation, final);
1354
g_variant_unref(final);
1358
g_dbus_method_invocation_return_error(invocation,
1361
"There currently isn't a layout in this server");
1334
g_dbus_method_invocation_return_error(invocation,
1337
"There currently isn't a layout in this server");
1363
g_variant_unref(idlist);
1342
g_variant_iter_init(&ids, g_variant_get_child_value(params, 0));
1368
g_variant_get(params, "(aias)", &ids, NULL);
1369
/* TODO: implementation ignores propertyNames declared in XML */
1344
1371
GVariantBuilder builder;
1345
1372
gboolean builder_init = FALSE;
1348
while (g_variant_iter_next(&ids, "i", &id)) {
1375
while (g_variant_iter_loop(ids, "i", &id)) {
1349
1376
DbusmenuMenuitem * mi = dbusmenu_menuitem_find_id(priv->root, id);
1350
1377
if (mi == NULL) continue;
1362
1389
if (props == NULL) {
1363
1390
GError * error = NULL;
1364
props = g_variant_parse(g_variant_type_new("a{sv}"), "{}", NULL, NULL, &error);
1391
props = g_variant_parse(G_VARIANT_TYPE("a{sv}"), "{}", NULL, NULL, &error);
1365
1392
if (error != NULL) {
1366
1393
g_warning("Unable to parse '{}' as a 'a{sv}': %s", error->message);
1367
1394
g_error_free(error);
1375
1402
g_variant_builder_add_value(&builder, mi_data);
1404
g_variant_iter_free(ids);
1406
/* a standard reference that must be unrefed */
1378
1407
GVariant * ret = NULL;
1380
1409
if (builder_init) {
1381
1410
ret = g_variant_builder_end(&builder);
1411
g_variant_ref_sink(ret);
1383
1413
GError * error = NULL;
1384
ret = g_variant_parse(g_variant_type_new("a(ia{sv})"), "[]", NULL, NULL, NULL);
1414
ret = g_variant_parse(G_VARIANT_TYPE("a(ia{sv})"), "[]", NULL, NULL, &error);
1385
1415
if (error != NULL) {
1386
1416
g_warning("Unable to parse '[]' as a 'a(ia{sv})': %s", error->message);
1387
1417
g_error_free(error);
1393
1422
if (ret != NULL) {
1394
1423
g_variant_builder_init(&builder, G_VARIANT_TYPE_TUPLE);
1395
1424
g_variant_builder_add_value(&builder, ret);
1425
g_variant_unref(ret);
1396
1426
final = g_variant_builder_end(&builder);
1398
1428
g_warning("Error building property list, final variant is NULL");
1431
1461
bus_get_children (DbusmenuServer * server, GVariant * params, GDBusMethodInvocation * invocation)
1433
1463
DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server);
1434
gint id = g_variant_get_int32(g_variant_get_child_value(params, 0));
1465
g_variant_get(params, "(i)", &id);
1436
1467
if (priv->root == NULL) {
1437
1468
g_dbus_method_invocation_return_error(invocation,
1465
1496
ret = g_variant_new_tuple(&end, 1);
1467
1498
GError * error = NULL;
1468
ret = g_variant_parse(g_variant_type_new("(a(ia{sv}))"), "([(0, {})],)", NULL, NULL, &error);
1499
ret = g_variant_parse(G_VARIANT_TYPE("(a(ia{sv}))"), "([(0, {})],)", NULL, NULL, &error);
1469
1500
if (error != NULL) {
1470
1501
g_warning("Unable to parse '([(0, {})],)' as a '(a(ia{sv}))': %s", error->message);
1471
1502
g_error_free(error);
1520
gint id = g_variant_get_int32(g_variant_get_child_value(params, 0));
1556
g_variant_get(params, "(isvu)", &id, &etype, &data, &ts);
1521
1558
DbusmenuMenuitem * mi = dbusmenu_menuitem_find_id(priv->root, id);
1523
1560
if (mi == NULL) {
1524
1562
g_dbus_method_invocation_return_error(invocation,
1526
1564
INVALID_MENUITEM_ID,
1527
1565
"The ID supplied %d does not refer to a menu item we have",
1532
idle_event_t * event_data = g_new0(idle_event_t, 1);
1533
event_data->mi = mi;
1534
g_object_ref(event_data->mi);
1535
event_data->eventid = g_strdup(g_variant_get_string(g_variant_get_child_value(params, 1), NULL));
1536
event_data->timestamp = g_variant_get_uint32(g_variant_get_child_value(params, 3));
1537
event_data->variant = g_variant_get_child_value(params, 2);
1539
if (g_variant_is_of_type(event_data->variant, G_VARIANT_TYPE_VARIANT)) {
1540
event_data->variant = g_variant_get_variant(event_data->variant);
1543
g_variant_ref_sink(event_data->variant);
1545
g_timeout_add(0, event_local_handler, event_data);
1568
g_variant_unref(data);
1572
idle_event_t * event_data = g_new0(idle_event_t, 1);
1573
event_data->mi = g_object_ref(mi);
1574
event_data->eventid = etype;
1575
event_data->timestamp = ts;
1576
event_data->variant = data; /* give away our reference */
1578
g_timeout_add(0, event_local_handler, event_data);
1547
1581
g_dbus_method_invocation_return_value(invocation, NULL);
1565
gint id = g_variant_get_int32(g_variant_get_child_value(params, 0));
1600
g_variant_get(params, "(i)", &id);
1566
1601
DbusmenuMenuitem * mi = dbusmenu_menuitem_find_id(priv->root, id);
1568
1603
if (mi == NULL) {