summaryrefslogtreecommitdiffstats
path: root/source/xap/xfce/patches/terminal.gtk.2.18.fix.diff
diff options
context:
space:
mode:
Diffstat (limited to 'source/xap/xfce/patches/terminal.gtk.2.18.fix.diff')
-rw-r--r--source/xap/xfce/patches/terminal.gtk.2.18.fix.diff101
1 files changed, 101 insertions, 0 deletions
diff --git a/source/xap/xfce/patches/terminal.gtk.2.18.fix.diff b/source/xap/xfce/patches/terminal.gtk.2.18.fix.diff
new file mode 100644
index 000000000..69a9e70e8
--- /dev/null
+++ b/source/xap/xfce/patches/terminal.gtk.2.18.fix.diff
@@ -0,0 +1,101 @@
+From 028dc2efd846defe796c7fa097ed84818bb43431 Mon Sep 17 00:00:00 2001
+From: Nick Schermer <nick@xfce.org>
+Date: Sun, 21 Mar 2010 22:05:31 +0000
+Subject: Disconnect bindings before closing the dialog.
+
+This avoids possible problems when Gtk+ emits property
+changes before the widgets are destroyed. This is currently
+the case for text entries in some Gtk 2.18 releases.
+---
+diff --git a/terminal/terminal-preferences-dialog.c b/terminal/terminal-preferences-dialog.c
+index 587bd92..8f33628 100644
+--- a/terminal/terminal-preferences-dialog.c
++++ b/terminal/terminal-preferences-dialog.c
+@@ -64,24 +64,28 @@ terminal_preferences_dialog_class_init (TerminalPreferencesDialogClass *klass)
+
+
+ #define BIND_PROPERTIES(name, property) \
+- { object = gtk_builder_get_object (GTK_BUILDER (dialog), name); \
++ G_STMT_START { \
++ object = gtk_builder_get_object (GTK_BUILDER (dialog), name); \
+ terminal_return_if_fail (G_IS_OBJECT (object)); \
+- exo_mutual_binding_new (G_OBJECT (dialog->preferences), name, \
+- G_OBJECT (object), property); }
++ binding = exo_mutual_binding_new (G_OBJECT (dialog->preferences), name, \
++ G_OBJECT (object), property); \
++ dialog->bindings = g_slist_prepend (dialog->bindings, binding); \
++ } G_STMT_END
+
+
+
+ static void
+ terminal_preferences_dialog_init (TerminalPreferencesDialog *dialog)
+ {
+- GError *error = NULL;
+- guint i;
+- GObject *object, *object2;
+- GtkWidget *editor;
+- gchar palette_name[16];
+- GtkFileFilter *filter;
+- gchar *file;
+- const gchar *props_active[] = { "title-mode", "command-login-shell",
++ GError *error = NULL;
++ guint i;
++ GObject *object, *object2;
++ GtkWidget *editor;
++ gchar palette_name[16];
++ GtkFileFilter *filter;
++ gchar *file;
++ ExoMutualBinding *binding;
++ const gchar *props_active[] = { "title-mode", "command-login-shell",
+ "command-update-records", "scrolling-single-line",
+ "scrolling-on-output", "scrolling-on-keystroke",
+ "scrolling-bar", "font-allow-bold",
+@@ -94,9 +98,9 @@ terminal_preferences_dialog_init (TerminalPreferencesDialog *dialog)
+ , "font-anti-alias"
+ #endif
+ };
+- const gchar *props_color[] = { "color-foreground", "color-cursor",
+- "color-background", "tab-activity-color",
+- "color-selection" };
++ const gchar *props_color[] = { "color-foreground", "color-cursor",
++ "color-background", "tab-activity-color",
++ "color-selection" };
+
+ dialog->preferences = terminal_preferences_get ();
+
+@@ -248,6 +252,8 @@ terminal_preferences_dialog_response (GtkWidget *widget,
+ gint response,
+ TerminalPreferencesDialog *dialog)
+ {
++ GSList *li;
++
+ /* check if we should open the user manual */
+ if (G_UNLIKELY (response == 1))
+ {
+@@ -256,6 +262,11 @@ terminal_preferences_dialog_response (GtkWidget *widget,
+ }
+ else
+ {
++ /* disconnect all the bindings */
++ for (li = dialog->bindings; li != NULL; li = li->next)
++ exo_mutual_binding_unbind (li->data);
++ g_slist_free (dialog->bindings);
++
+ /* close the preferences dialog */
+ gtk_widget_destroy (widget);
+ }
+diff --git a/terminal/terminal-preferences-dialog.h b/terminal/terminal-preferences-dialog.h
+index b2db4f5..268d70a 100644
+--- a/terminal/terminal-preferences-dialog.h
++++ b/terminal/terminal-preferences-dialog.h
+@@ -48,6 +48,7 @@ struct _TerminalPreferencesDialog
+
+ TerminalPreferences *preferences;
+ guint signal_id;
++ GSList *bindings;
+ };
+
+ GType terminal_preferences_dialog_get_type (void) G_GNUC_CONST;
+--
+cgit v0.8.2.1