]> Pileus Git - ~andy/gtk/blob - gdk/broadway/gdkspawn-broadway.c
[broadway] Remove unnecessary backend-specific function
[~andy/gtk] / gdk / broadway / gdkspawn-broadway.c
1 /*
2  * Copyright (C) 2003 Sun Microsystems Inc.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  *
19  * Authors: Mark McLoughlin <mark@skynet.ie>
20  */
21
22 #include "config.h"
23
24 #include "gdkspawn.h"
25
26 #include <glib.h>
27 #include <string.h>
28 #include <stdlib.h>
29
30
31 typedef struct {
32   char *display;
33   GSpawnChildSetupFunc child_setup;
34   gpointer user_data;
35 } UserChildSetup;
36
37 static void
38 set_environment (gpointer user_data)
39 {
40   UserChildSetup *setup = user_data;
41
42   g_setenv ("DISPLAY", setup->display, TRUE);
43
44   if (setup->child_setup)
45     setup->child_setup (setup->user_data);
46 }
47
48 gboolean
49 gdk_spawn_on_screen (GdkScreen             *screen,
50                      const gchar           *working_directory,
51                      gchar                **argv,
52                      gchar                **envp,
53                      GSpawnFlags            flags,
54                      GSpawnChildSetupFunc   child_setup,
55                      gpointer               user_data,
56                      GPid                  *child_pid,
57                      GError               **error)
58 {
59   UserChildSetup setup_data;
60
61   g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE);
62
63   setup_data.display = gdk_screen_make_display_name (screen);
64   setup_data.child_setup = child_setup;
65   setup_data.user_data = user_data;
66
67   return g_spawn_async (working_directory,
68                           argv,
69                           envp,
70                           flags,
71                           set_environment,
72                           &setup_data,
73                           child_pid,
74                           error);
75 }
76
77 gboolean
78 gdk_spawn_on_screen_with_pipes (GdkScreen            *screen,
79                                 const gchar          *working_directory,
80                                 gchar               **argv,
81                                 gchar               **envp,
82                                 GSpawnFlags           flags,
83                                 GSpawnChildSetupFunc  child_setup,
84                                 gpointer              user_data,
85                                 GPid                 *child_pid,
86                                 gint                 *standard_input,
87                                 gint                 *standard_output,
88                                 gint                 *standard_error,
89                                 GError              **error)
90 {
91   UserChildSetup setup_data;
92
93   g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE);
94
95   setup_data.display = gdk_screen_make_display_name (screen);
96   setup_data.child_setup = child_setup;
97   setup_data.user_data = user_data;
98
99   return g_spawn_async_with_pipes (working_directory,
100                                      argv,
101                                      envp,
102                                      flags,
103                                      set_environment,
104                                      &setup_data,
105                                      child_pid,
106                                      standard_input,
107                                      standard_output,
108                                      standard_error,
109                                      error);
110
111 }
112
113 gboolean
114 gdk_spawn_command_line_on_screen (GdkScreen    *screen,
115                                   const gchar  *command_line,
116                                   GError      **error)
117 {
118   gchar    **argv = NULL;
119   gboolean   retval;
120
121   g_return_val_if_fail (command_line != NULL, FALSE);
122
123   if (!g_shell_parse_argv (command_line,
124                            NULL, &argv,
125                            error))
126     return FALSE;
127
128   retval = gdk_spawn_on_screen (screen,
129                                 NULL, argv, NULL,
130                                 G_SPAWN_SEARCH_PATH,
131                                 NULL, NULL, NULL,
132                                 error);
133   g_strfreev (argv);
134
135   return retval;
136 }