run: Add various sharing options and X11 support

tingping/wmclass
Alexander Larsson 2014-12-18 18:48:33 +01:00
parent 8ac912ee65
commit 85cf38e19e
1 changed files with 37 additions and 1 deletions

View File

@ -53,6 +53,7 @@ xdg_app_builtin_run (int argc, char **argv, GCancellable *cancellable, GError **
gs_free char *runtime = NULL;
gs_free char *runtime_ref = NULL;
gs_free char *app_ref = NULL;
gs_free char *x11_socket = NULL;
_gs_unref_keyfile GKeyFile *metakey = NULL;
gs_free_error GError *my_error = NULL;
gs_free_error GError *my_error2 = NULL;
@ -146,7 +147,42 @@ xdg_app_builtin_run (int argc, char **argv, GCancellable *cancellable, GError **
argv_array = g_ptr_array_new ();
g_ptr_array_add (argv_array, HELPER);
g_ptr_array_add (argv_array, "-i");
if (g_key_file_get_boolean (metakey, "Environment", "ipc", NULL))
g_ptr_array_add (argv_array, "-i");
if (g_key_file_get_boolean (metakey, "Environment", "host-fs", NULL))
g_ptr_array_add (argv_array, "-f");
if (g_key_file_get_boolean (metakey, "Environment", "homedir", NULL))
g_ptr_array_add (argv_array, "-H");
if (g_key_file_get_boolean (metakey, "Environment", "network", NULL))
g_ptr_array_add (argv_array, "-n");
if (g_key_file_get_boolean (metakey, "Environment", "x11", NULL))
{
const char *display = g_getenv ("DISPLAY");
if (display && display[0] == ':' && g_ascii_isdigit (display[1]))
{
const char *display_nr = &display[1];
const char *display_nr_end = display_nr;
gs_free char *d = NULL;
while (g_ascii_isdigit (*display_nr_end))
display_nr_end++;
d = g_strndup (display_nr, display_nr_end - display_nr);
x11_socket = g_strdup_printf ("/tmp/.X11-unix/X%s", d);
g_ptr_array_add (argv_array, "-x");
g_ptr_array_add (argv_array, x11_socket);
}
}
else
g_unsetenv ("DISPLAY");
g_ptr_array_add (argv_array, "-a");
g_ptr_array_add (argv_array, (char *)gs_file_get_path_cached (app_files));
g_ptr_array_add (argv_array, "-v");