diff options
Diffstat (limited to 'community/gnome-panel/gnome-desktop-3.8.patch')
-rw-r--r-- | community/gnome-panel/gnome-desktop-3.8.patch | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/community/gnome-panel/gnome-desktop-3.8.patch b/community/gnome-panel/gnome-desktop-3.8.patch new file mode 100644 index 000000000..3c8823cd2 --- /dev/null +++ b/community/gnome-panel/gnome-desktop-3.8.patch @@ -0,0 +1,199 @@ +diff -Naur gnome-panel-3.6.2.orig/applets/clock/calendar-window.c gnome-panel-3.6.2/applets/clock/calendar-window.c +--- gnome-panel-3.6.2.orig/applets/clock/calendar-window.c 2012-11-12 18:35:17.000000000 +0100 ++++ gnome-panel-3.6.2/applets/clock/calendar-window.c 2013-04-08 23:10:30.451012763 +0200 +@@ -42,9 +42,6 @@ + #include <glib/gi18n.h> + #include <gio/gio.h> + +-#define GNOME_DESKTOP_USE_UNSTABLE_API +-#include <libgnome-desktop/gnome-desktop-utils.h> +- + #include "calendar-window.h" + + #include "clock.h" +@@ -168,6 +165,13 @@ + return; + } + ++ /* FIXME: reintroduce terminal support if a proper GAppInfo port of gnome-panel is ever done */ ++ if (terminal) { ++ g_printerr ("Terminal-based calendar/tasks applications are no longer supported, sorry. " ++ "Please configure a different application.\n"); ++ return; ++ } ++ + command_line = g_find_program_in_path (program); + if (command_line == NULL) { + g_printerr ("Cannot launch calendar/tasks application: %s in path\n", program); +@@ -189,9 +193,6 @@ + screen = gtk_widget_get_screen (calwin->priv->calendar); + error = NULL; + +- if (terminal) +- gnome_desktop_prepend_terminal_to_vector (&argc, &argv); +- + display = gdk_screen_make_display_name (screen); + + result = g_spawn_async (NULL, /* working directory */ +diff -Naur gnome-panel-3.6.2.orig/gnome-panel/panel-run-dialog.c gnome-panel-3.6.2/gnome-panel/panel-run-dialog.c +--- gnome-panel-3.6.2.orig/gnome-panel/panel-run-dialog.c 2012-11-12 18:35:17.000000000 +0100 ++++ gnome-panel-3.6.2/gnome-panel/panel-run-dialog.c 2013-04-08 23:10:52.408175181 +0200 +@@ -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,132 @@ + */ + } + ++ ++/** ++ * panel_run_dialog_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. ++ **/ ++/* TODO: throw out this function if there ever is a proper GAppInfo port */ ++static void ++panel_run_dialog_prepend_terminal_to_vector (int *argc, char ***argv) ++{ ++ 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); ++ ++ /* 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); ++} ++ + static gboolean + panel_run_dialog_launch_command (PanelRunDialog *dialog, + const char *command, +@@ -354,7 +479,7 @@ + screen = gtk_window_get_screen (GTK_WINDOW (dialog->run_dialog)); + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->terminal_checkbox))) +- gnome_desktop_prepend_terminal_to_vector (&argc, &argv); ++ panel_run_dialog_prepend_terminal_to_vector (&argc, &argv); + + display = gdk_screen_make_display_name (screen); + |