--- ./applets/clock/calendar-window.c	2012-11-12 18:35:17.000000000 +0100
+++ ./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 */
--- ./gnome-panel/panel-run-dialog.c	2012-11-12 18:35:17.000000000 +0100
+++ ./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);
 
