summaryrefslogtreecommitdiff
path: root/cut-n-paste-code/libegg/egg-screen-exec.c
diff options
context:
space:
mode:
Diffstat (limited to 'cut-n-paste-code/libegg/egg-screen-exec.c')
-rw-r--r--cut-n-paste-code/libegg/egg-screen-exec.c261
1 files changed, 0 insertions, 261 deletions
diff --git a/cut-n-paste-code/libegg/egg-screen-exec.c b/cut-n-paste-code/libegg/egg-screen-exec.c
deleted file mode 100644
index 2a96e8c8b..000000000
--- a/cut-n-paste-code/libegg/egg-screen-exec.c
+++ /dev/null
@@ -1,261 +0,0 @@
-/* egg-screen-exec.c
- *
- * Copyright (C) 2002 Sun Microsystems Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors: Mark McLoughlin <mark@skynet.ie>
- */
-
-#include <config.h>
-
-#include "egg-screen-exec.h"
-
-#include <string.h>
-#include <libgnome/gnome-exec.h>
-
-#ifndef HAVE_GTK_MULTIHEAD
-#include <gdk/gdkx.h>
-#endif
-
-extern char **environ;
-
-/**
- * egg_screen_exec_display_string:
- * @screen: A #GdkScreen
- *
- * Description: Returns a string that when passed to XOpenDisplay()
- * would cause @screen to be the default screen on the newly opened
- * X display. This string is suitable for setting $DISPLAY when
- * launching an application which should appear on @screen.
- *
- * Returns: a newly allocated string or %NULL on error.
- **/
-char *
-egg_screen_exec_display_string (GdkScreen *screen)
-{
-#ifdef HAVE_GTK_MULTIHEAD
- GString *str;
- const char *old_display;
- char *retval;
- char *p;
-
- g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
-
- if (gdk_screen_get_default () == screen)
- return g_strdup_printf ("DISPLAY=%s",
- gdk_display_get_name (
- gdk_screen_get_display (screen)));
-
- old_display = gdk_display_get_name (gdk_screen_get_display (screen));
-
- str = g_string_new ("DISPLAY=");
- g_string_append (str, old_display);
-
- p = strrchr (str->str, '.');
- if (p && p > strchr (str->str, ':'))
- g_string_truncate (str, p - str->str);
-
- g_string_append_printf (str, ".%d", gdk_screen_get_number (screen));
-
- retval = str->str;
-
- g_string_free (str, FALSE);
-
- return retval;
-#else
- return g_strdup (DisplayString (GDK_DISPLAY ()));
-#endif
-}
-
-/**
- * egg_screen_exec_environment:
- * @screen: A #GdkScreen
- *
- * Description: Modifies the current program environment to
- * ensure that $DISPLAY is set such that a launched application
- * inheriting this environment would appear on @screen.
- *
- * Returns: a newly-allocated %NULL-terminated array of strings or
- * %NULL on error. Use g_strfreev() to free it.
- **/
-char **
-egg_screen_exec_environment (GdkScreen *screen)
-{
- char **retval = NULL;
- int i, env_len;
-#ifdef HAVE_GTK_MULTIHEAD
- int display_index = -1;
-
- g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
-
- for (env_len = 0; environ [env_len]; env_len++)
- if (!strncmp (environ [env_len], "DISPLAY", 7))
- display_index = env_len;
-
- if (display_index == -1)
- display_index = env_len++;
-#else
- for (env_len = 0; environ [env_len]; env_len++);
-#endif
-
- retval = g_new (char *, env_len + 1);
- retval [env_len] = NULL;
-
- for (i = 0; i < env_len; i++)
-#ifdef HAVE_GTK_MULTIHEAD
- if (i == display_index)
- retval [i] = egg_screen_exec_display_string (screen);
- else
-#endif
- retval [i] = g_strdup (environ [i]);
-
- g_assert (i == env_len);
-
- return retval;
-}
-
-/**
- * egg_screen_execute_async:
- * @screen: A #GdkScreen
- * @dir: Directory in which child should be executed, or %NULL for current
- * directory
- * @argc: Number of arguments
- * @argv: Argument vector to exec child
- *
- * Description: Like gnome_execute_async(), but ensures that the child
- * is launched in an environment such that if it calls XOpenDisplay()
- * the resulting display would have @screen as the default screen.
- *
- * Returns: process id of child, or %-1 on error.
- **/
-int
-egg_screen_execute_async (GdkScreen *screen,
- const char *dir,
- int argc,
- char * const argv [])
-{
-#ifdef HAVE_GTK_MULTIHEAD
- char **envp = NULL;
- int envc = 0;
- int retval;
-
- g_return_val_if_fail (GDK_IS_SCREEN (screen), -1);
-
- if (gdk_screen_get_default () != screen) {
- envc = 1;
- envp = g_new0 (char *, 2);
- envp [0] = egg_screen_exec_display_string (screen);
- }
-
- retval = gnome_execute_async_with_env (dir, argc, argv, envc, envp);
-
- g_strfreev (envp);
-
- return retval;
-#else
- return gnome_execute_async (dir, argc, argv);
-#endif
-}
-
-/**
- * egg_screen_execute_shell:
- * @screen: A #GdkScreen.
- * @dir: Directory in which child should be executed, or %NULL for current
- * directory
- * @commandline: Shell command to execute
- *
- * Description: Like gnome_execute_shell(), but ensures that the child
- * is launched in an environment such that if it calls XOpenDisplay()
- * the resulting display would have @screen as the default screen.
- *
- * Returns: process id of shell, or %-1 on error.
- **/
-int
-egg_screen_execute_shell (GdkScreen *screen,
- const char *dir,
- const char *command)
-{
-#ifdef HAVE_GTK_MULTIHEAD
- int retval = -1;
-
- g_return_val_if_fail (GDK_IS_SCREEN (screen), -1);
-
- if (gdk_screen_get_default () == screen)
- retval = gnome_execute_shell (dir, command);
-
- else {
- char *exec;
- char *display;
-
- display = egg_screen_exec_display_string (screen);
- exec = g_strconcat (display, " ", command, NULL);
-
- retval = gnome_execute_shell (dir, exec);
-
- g_free (display);
- g_free (exec);
- }
-
- return retval;
-#else
- return gnome_execute_shell (dir, command);
-#endif
-}
-
-/**
- * egg_screen_execute_command_line_async:
- * @screen: A #GdkScreen.
- * @command_line: a command line
- * @error: return location for errors
- *
- * Description: Like g_spawn_command_line_async(), but ensures that
- * the child is launched in an environment such that if it calls
- * XOpenDisplay() the resulting display would have @screen as the
- * default screen.
- *
- * Returns: %TRUE on success, %FALSE if error is set.
- **/
-gboolean
-egg_screen_execute_command_line_async (GdkScreen *screen,
- const char *command,
- GError **error)
-{
-#ifdef HAVE_GTK_MULTIHEAD
- gboolean retval;
- char **argv = NULL;
- char **envp = NULL;
-
- g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE);
- g_return_val_if_fail (command != NULL, FALSE);
-
- if (!g_shell_parse_argv (command, NULL, &argv, error))
- return FALSE;
-
- if (gdk_screen_get_default () != screen)
- envp = egg_screen_exec_environment (screen);
-
- retval = g_spawn_async (NULL,
- argv, envp, G_SPAWN_SEARCH_PATH,
- NULL, NULL, NULL, error);
- g_strfreev (argv);
- g_strfreev (envp);
-
- return retval;
-#else
- return g_spawn_command_line_async (command, error);
-#endif
-}