summaryrefslogtreecommitdiff
path: root/community/gnome-panel/gnome-desktop-3.8.patch
diff options
context:
space:
mode:
Diffstat (limited to 'community/gnome-panel/gnome-desktop-3.8.patch')
-rw-r--r--community/gnome-panel/gnome-desktop-3.8.patch199
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);
+