@@ -386,6 +386,89 @@ xdp_portal_new (void)
386
386
return portal ;
387
387
}
388
388
389
+ static void
390
+ register_cb (GObject * source_object ,
391
+ GAsyncResult * result ,
392
+ gpointer user_data )
393
+ {
394
+ g_autoptr (GTask ) task = user_data ;
395
+ g_autoptr (GVariant ) ret = NULL ;
396
+ g_autoptr (GError ) error = NULL ;
397
+
398
+ ret = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source_object ),
399
+ result ,
400
+ & error );
401
+ if (error )
402
+ g_task_return_error (task , g_steal_pointer (& error ));
403
+ else
404
+ g_task_return_boolean (task , TRUE);
405
+ }
406
+
407
+ void
408
+ xdp_portal_register (XdpPortal * portal ,
409
+ const char * app_id ,
410
+ GCancellable * cancellable ,
411
+ GAsyncReadyCallback callback ,
412
+ gpointer user_data )
413
+ {
414
+ g_autoptr (GTask ) task = NULL ;
415
+ GVariantBuilder options ;
416
+ g_autoptr (GError ) error = NULL ;
417
+
418
+ g_return_if_fail (XDP_IS_PORTAL (portal ));
419
+ g_return_if_fail (app_id );
420
+ g_return_if_fail (g_strcmp0 (app_id , "" ) != 0 );
421
+
422
+ task = g_task_new (portal , cancellable , callback , user_data );
423
+ g_task_set_source_tag (task , xdp_portal_register );
424
+
425
+ if (xdp_portal_running_under_flatpak ())
426
+ {
427
+ g_task_return_boolean (task , TRUE);
428
+ return ;
429
+ }
430
+
431
+ if (xdp_portal_running_under_snap (& error ))
432
+ {
433
+ g_task_return_boolean (task , TRUE);
434
+ return ;
435
+ }
436
+
437
+ if (error )
438
+ {
439
+ g_task_return_error (task , error );
440
+ return ;
441
+ }
442
+
443
+ g_variant_builder_init (& options , G_VARIANT_TYPE_VARDICT );
444
+
445
+ g_dbus_connection_call (portal -> bus ,
446
+ PORTAL_BUS_NAME ,
447
+ PORTAL_OBJECT_PATH ,
448
+ "org.freedesktop.host.portal.Registry" ,
449
+ "Register" ,
450
+ g_variant_new ("(sa{sv})" , app_id , & options ),
451
+ NULL ,
452
+ G_DBUS_CALL_FLAGS_NONE ,
453
+ -1 ,
454
+ NULL ,
455
+ register_cb ,
456
+ g_object_ref (task ));
457
+ }
458
+
459
+ gboolean
460
+ xdp_portal_register_finish (XdpPortal * portal ,
461
+ GAsyncResult * result ,
462
+ GError * * error )
463
+ {
464
+ g_return_val_if_fail (XDP_IS_PORTAL (portal ), FALSE);
465
+ g_return_val_if_fail (g_task_is_valid (result , portal ), FALSE);
466
+ g_return_val_if_fail (g_task_get_source_tag (G_TASK (result )) ==
467
+ xdp_portal_register , FALSE);
468
+
469
+ return g_task_propagate_boolean (G_TASK (result ), error );
470
+ }
471
+
389
472
/* This function is copied from xdg-desktop-portal */
390
473
static int
391
474
_xdp_parse_cgroup_file (FILE * f , gboolean * is_snap )
0 commit comments