From 78ef32110a4b46d05cdc3b3273583ef1aed9f75a Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 6 Jul 2016 23:34:55 -0400 Subject: [PATCH] Add portal helpers These are private helper functions that will be used in the following commits to get information about whether we are running in a flatpak sandbox, etc. We allow the use of GTK_USE_PORTAL=1 in the environment to force the use of portals. This can be useful for testing and debugging portal interaction. https://bugzilla.gnome.org/show_bug.cgi?id=768498 --- gio/Makefile.am | 2 ++ gio/gportalsupport.c | 84 ++++++++++++++++++++++++++++++++++++++++++++ gio/gportalsupport.h | 30 ++++++++++++++++ 3 files changed, 116 insertions(+) create mode 100644 gio/gportalsupport.c create mode 100644 gio/gportalsupport.h diff --git a/gio/Makefile.am b/gio/Makefile.am index 3b3c104db..9a0d758e7 100644 --- a/gio/Makefile.am +++ b/gio/Makefile.am @@ -424,6 +424,8 @@ libgio_2_0_la_SOURCES = \ gpollableutils.c \ gpollfilemonitor.c \ gpollfilemonitor.h \ + gportalsupport.c \ + gportalsupport.h \ gproxy.c \ gproxyaddress.c \ gproxyaddressenumerator.c \ diff --git a/gio/gportalsupport.c b/gio/gportalsupport.c new file mode 100644 index 000000000..4532cf0cb --- /dev/null +++ b/gio/gportalsupport.c @@ -0,0 +1,84 @@ +/* GIO - GLib Input, Output and Streaming Library + * + * Copyright 2016 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see . + */ + +#include "config.h" + +#include "gportalsupport.h" + +static gboolean flatpak_info_read; +static gboolean use_portal; +static gboolean network_available; + +static void +read_flatpak_info (void) +{ + char *path; + + if (flatpak_info_read) + return; + + flatpak_info_read = TRUE; + + path = g_build_filename (g_get_user_runtime_dir (), "flatpak-info", NULL); + if (g_file_test (path, G_FILE_TEST_EXISTS)) + { + GKeyFile *keyfile; + + use_portal = TRUE; + network_available = FALSE; + + keyfile = g_key_file_new (); + if (g_key_file_load_from_file (keyfile, path, G_KEY_FILE_NONE, NULL)) + { + char **shared = NULL; + + shared = g_key_file_get_string_list (keyfile, "Context", "shared", NULL, NULL); + if (shared) + { + network_available = g_strv_contains ((const char * const *)shared, "network"); + g_strfreev (shared); + } + } + } + else + { + const char *var; + + var = g_getenv ("GTK_USE_PORTAL"); + if (var && var[0] == '1') + use_portal = TRUE; + network_available = TRUE; + } + + g_free (path); +} + +gboolean +glib_should_use_portal (void) +{ + read_flatpak_info (); + return use_portal; +} + +gboolean +glib_network_available_in_sandbox (void) +{ + read_flatpak_info (); + return network_available; +} + diff --git a/gio/gportalsupport.h b/gio/gportalsupport.h new file mode 100644 index 000000000..a92e07ca7 --- /dev/null +++ b/gio/gportalsupport.h @@ -0,0 +1,30 @@ +/* GIO - GLib Input, Output and Streaming Library + * + * Copyright 2016 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see . + */ + +#ifndef __G_PORTAL_SUPPORT_H__ + +#include + +G_BEGIN_DECLS + +gboolean glib_should_use_portal (void); +gboolean glib_network_available_in_sandbox (void); + +G_END_DECLS + +#endif