diff options
Diffstat (limited to 'gnome2-libs/gnome-panel/0005-panel-run-dialog-resurrect-function-gnome_desktop_pr.patch')
-rw-r--r-- | gnome2-libs/gnome-panel/0005-panel-run-dialog-resurrect-function-gnome_desktop_pr.patch | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/gnome2-libs/gnome-panel/0005-panel-run-dialog-resurrect-function-gnome_desktop_pr.patch b/gnome2-libs/gnome-panel/0005-panel-run-dialog-resurrect-function-gnome_desktop_pr.patch new file mode 100644 index 0000000000..b6a6bf8c5b --- /dev/null +++ b/gnome2-libs/gnome-panel/0005-panel-run-dialog-resurrect-function-gnome_desktop_pr.patch @@ -0,0 +1,177 @@ +From bf6af945130299a69a244afaee4eecbd3fb77233 Mon Sep 17 00:00:00 2001 +From: Philipp Kaluza <phk@src.gnome.org> +Date: Fri, 8 Mar 2013 18:08:32 +0100 +Subject: [PATCH 5/6] panel-run-dialog: resurrect function + gnome_desktop_prepend_terminal_to_vector + +, which was removed from gnome-desktop in commit +9bab2144b7c8ace0c057720be3c48fb24a80a19d , and keep a local +copy in panel-run-dialog.c (simple helper function, static). +(Second half of fix for bug #237308 .) +--- + gnome-panel/panel-run-dialog.c | 135 ++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 133 insertions(+), 2 deletions(-) + +diff --git a/gnome-panel/panel-run-dialog.c b/gnome-panel/panel-run-dialog.c +index 801b9bc..faf3d7e 100644 +--- a/gnome-panel/panel-run-dialog.c ++++ b/gnome-panel/panel-run-dialog.c +@@ -25,6 +25,7 @@ + * Havoc Pennington <hp@pobox.com> + * George Lebl <jirka@5z.com> + * Mark McLoughlin <mark@skynet.ie> ++ * Tom Tromey (Copyright (C) 1998) + */ + + #include <config.h> +@@ -42,8 +43,6 @@ + #include <gdk/gdkkeysyms.h> + #include <gmenu-tree.h> + +-#include <libgnome-desktop/gnome-desktop-utils.h> +- + #include <libpanel-util/panel-error.h> + #include <libpanel-util/panel-glib.h> + #include <libpanel-util/panel-gtk.h> +@@ -335,6 +334,138 @@ dummy_child_watch (GPid pid, + */ + } + ++ ++/** ++ * gnome_desktop_prepend_terminal_to_vector: ++ * @argc: a pointer to the vector size ++ * @argv: a pointer to the vector ++ * ++ * Description: Prepends a terminal (either the one configured as default in ++ * the user's GNOME setup, or one of the common xterm emulators) to the passed ++ * in vector, modifying it in the process. The vector should be allocated with ++ * #g_malloc, as this will #g_free the original vector. Also all elements must ++ * have been allocated separately. That is the standard glib/GNOME way of ++ * doing vectors however. If the integer that @argc points to is negative, the ++ * size will first be computed. Also note that passing in pointers to a vector ++ * that is empty, will just create a new vector for you. ++ **/ ++static void ++gnome_desktop_prepend_terminal_to_vector (int *argc, char ***argv) ++{ ++#ifndef G_OS_WIN32 ++ char **real_argv; ++ int real_argc; ++ int i, j; ++ char **term_argv = NULL; ++ int term_argc = 0; ++ GSettings *settings; ++ ++ gchar *terminal = NULL; ++ ++ char **the_argv; ++ ++ g_return_if_fail (argc != NULL); ++ g_return_if_fail (argv != NULL); ++ ++ // _gnome_desktop_init_i18n (); ++ ++ /* sanity */ ++ if(*argv == NULL) ++ *argc = 0; ++ ++ the_argv = *argv; ++ ++ /* compute size if not given */ ++ if (*argc < 0) { ++ for (i = 0; the_argv[i] != NULL; i++) ++ ; ++ *argc = i; ++ } ++ ++ settings = g_settings_new ("org.gnome.desktop.default-applications.terminal"); ++ terminal = g_settings_get_string (settings, "exec"); ++ ++ if (terminal) { ++ gchar *command_line; ++ gchar *exec_flag; ++ ++ exec_flag = g_settings_get_string (settings, "exec-arg"); ++ ++ if (exec_flag == NULL) ++ command_line = g_strdup (terminal); ++ else ++ command_line = g_strdup_printf ("%s %s", terminal, ++ exec_flag); ++ ++ g_shell_parse_argv (command_line, ++ &term_argc, ++ &term_argv, ++ NULL /* error */); ++ ++ g_free (command_line); ++ g_free (exec_flag); ++ g_free (terminal); ++ } ++ ++ g_object_unref (settings); ++ ++ if (term_argv == NULL) { ++ char *check; ++ ++ term_argc = 2; ++ term_argv = g_new0 (char *, 3); ++ ++ check = g_find_program_in_path ("gnome-terminal"); ++ if (check != NULL) { ++ term_argv[0] = check; ++ /* Note that gnome-terminal takes -x and ++ * as -e in gnome-terminal is broken we use that. */ ++ term_argv[1] = g_strdup ("-x"); ++ } else { ++ if (check == NULL) ++ check = g_find_program_in_path ("nxterm"); ++ if (check == NULL) ++ check = g_find_program_in_path ("color-xterm"); ++ if (check == NULL) ++ check = g_find_program_in_path ("rxvt"); ++ if (check == NULL) ++ check = g_find_program_in_path ("xterm"); ++ if (check == NULL) ++ check = g_find_program_in_path ("dtterm"); ++ if (check == NULL) { ++ g_warning (_("Cannot find a terminal, using " ++ "xterm, even if it may not work")); ++ check = g_strdup ("xterm"); ++ } ++ term_argv[0] = check; ++ term_argv[1] = g_strdup ("-e"); ++ } ++ } ++ ++ real_argc = term_argc + *argc; ++ real_argv = g_new (char *, real_argc + 1); ++ ++ for (i = 0; i < term_argc; i++) ++ real_argv[i] = term_argv[i]; ++ ++ for (j = 0; j < *argc; j++, i++) ++ real_argv[i] = (char *)the_argv[j]; ++ ++ real_argv[i] = NULL; ++ ++ g_free (*argv); ++ *argv = real_argv; ++ *argc = real_argc; ++ ++ /* we use g_free here as we sucked all the inner strings ++ * out from it into real_argv */ ++ g_free (term_argv); ++#else ++ /* FIXME: Implement when needed */ ++ g_warning ("gnome_prepend_terminal_to_vector: Not implemented"); ++#endif ++} ++ + static gboolean + panel_run_dialog_launch_command (PanelRunDialog *dialog, + const char *command, +-- +1.8.2 + |