summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2018-08-30 13:05:55 -0400
committerMatthias Clasen <mclasen@redhat.com>2018-08-30 22:53:36 -0400
commitb271db253f307bcab7651434502dcb1e27b905dd (patch)
treedc4702bfabd1cea0da93cf6231a4368801911603
parenteb9f95e9fa6fa01cfb04f0a2cbf7af6c103fc528 (diff)
downloadgtk+-b271db253f307bcab7651434502dcb1e27b905dd.tar.gz
Add utility functions for portal paths
The paths that we create for requests and sessions need some icky code to create. Keep it in one place.
-rw-r--r--gtk/gtkprivate.c36
-rw-r--r--gtk/gtkprivate.h4
2 files changed, 40 insertions, 0 deletions
diff --git a/gtk/gtkprivate.c b/gtk/gtkprivate.c
index 52240f61f9..b8a34f32b5 100644
--- a/gtk/gtkprivate.c
+++ b/gtk/gtkprivate.c
@@ -291,3 +291,39 @@ gtk_should_use_portal (void)
return use_portal[0] == '1';
}
+
+static char *
+get_portal_path (GDBusConnection *connection,
+ const char *kind,
+ char **token)
+{
+ char *sender;
+ int i;
+ char *path;
+
+ *token = g_strdup_printf ("gtk%d", g_random_int_range (0, G_MAXINT));
+ sender = g_strdup (g_dbus_connection_get_unique_name (connection) + 1);
+ for (i = 0; sender[i]; i++)
+ if (sender[i] == '.')
+ sender[i] = '_';
+
+ path = g_strconcat (PORTAL_OBJECT_PATH, "/", kind, "/", sender, "/", token, NULL);
+
+ g_free (sender);
+
+ return path;
+}
+
+char *
+gtk_get_portal_request_path (GDBusConnection *connection,
+ char **token)
+{
+ return get_portal_path (connection, "request", token);
+}
+
+char *
+gtk_get_portal_session_path (GDBusConnection *connection,
+ char **token)
+{
+ return get_portal_path (connection, "session", token);
+}
diff --git a/gtk/gtkprivate.h b/gtk/gtkprivate.h
index 2675889953..809c855959 100644
--- a/gtk/gtkprivate.h
+++ b/gtk/gtkprivate.h
@@ -110,6 +110,10 @@ gdouble _gtk_get_slowdown (void);
void _gtk_set_slowdown (gdouble slowdown_factor);
gboolean gtk_should_use_portal (void);
+char *gtk_get_portal_request_path (GDBusConnection *connection,
+ char **token);
+char *gtk_get_portal_session_path (GDBusConnection *connection,
+ char **token);
#define PORTAL_BUS_NAME "org.freedesktop.portal.Desktop"
#define PORTAL_OBJECT_PATH "/org/freedesktop/portal/desktop"