[gtk/wip/hadess/portal-fixes: 4/5] Add portal version checking helper
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/hadess/portal-fixes: 4/5] Add portal version checking helper
- Date: Mon, 30 Mar 2020 16:32:22 +0000 (UTC)
commit 027ca22defe39ad48033dee3e0f38cf3f5a33116
Author: Bastien Nocera <hadess hadess net>
Date: Mon Mar 23 14:56:43 2020 +0100
Add portal version checking helper
Add gtk_get_portal_interface_version() to check the version of a portal.
gtk/gtkprivate.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
gtk/gtkprivate.h | 2 ++
2 files changed, 59 insertions(+)
---
diff --git a/gtk/gtkprivate.c b/gtk/gtkprivate.c
index 8de1e81a5e..9a6cd584dc 100644
--- a/gtk/gtkprivate.c
+++ b/gtk/gtkprivate.c
@@ -268,6 +268,63 @@ _gtk_ensure_resources (void)
g_once (®ister_resources_once, register_resources, NULL);
}
+/*
+ * gtk_get_portal_interface_version:
+ * @connection: a session #GDBusConnection
+ * @interface_name: the interface name for the portal interface
+ * we're interested in.
+ *
+ * Returns: the version number of the portal, or 0 on error.
+ */
+guint
+gtk_get_portal_interface_version (GDBusConnection *connection,
+ const char *interface_name)
+{
+ GDBusProxy *proxy = NULL;
+ GError *error = NULL;
+ GVariant *ret = NULL;
+ char *owner = NULL;
+ guint version = 0;
+
+ proxy = g_dbus_proxy_new_sync (connection,
+ 0,
+ NULL,
+ "org.freedesktop.portal.Desktop",
+ "/org/freedesktop/portal/desktop",
+ interface_name,
+ NULL,
+ &error);
+ if (!proxy)
+ {
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ g_warning ("Could not query portal version on interface '%s': %s",
+ interface_name, error->message);
+ goto out;
+ }
+
+ owner = g_dbus_proxy_get_name_owner (proxy);
+ if (owner == NULL)
+ {
+ g_debug ("%s not provided by any service", interface_name);
+ goto out;
+ }
+
+ ret = g_dbus_proxy_get_cached_property (proxy, "version");
+ if (ret)
+ version = g_variant_get_uint32 (ret);
+
+ g_debug ("Got version %u for portal interface '%s'",
+ version, interface_name);
+
+out:
+ g_clear_object (&proxy);
+ g_clear_error (&error);
+ g_clear_pointer (&ret, g_variant_unref);
+ g_clear_pointer (&owner, g_free);
+
+ return version;
+}
+
static char *
get_portal_path (GDBusConnection *connection,
const char *kind,
diff --git a/gtk/gtkprivate.h b/gtk/gtkprivate.h
index 6cac03c763..f4ba489ba6 100644
--- a/gtk/gtkprivate.h
+++ b/gtk/gtkprivate.h
@@ -115,6 +115,8 @@ char *gtk_get_portal_request_path (GDBusConnection *connection,
char **token);
char *gtk_get_portal_session_path (GDBusConnection *connection,
char **token);
+guint gtk_get_portal_interface_version (GDBusConnection *connection,
+ const char *interface_name);
#define PORTAL_BUS_NAME "org.freedesktop.portal.Desktop"
#define PORTAL_OBJECT_PATH "/org/freedesktop/portal/desktop"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]