[glade3/glade-3-8] * plugins/gtk+/glade-gtk.c: Fixed crashes when textview's buffer is deleted, fix by Martin Schle



commit cf7931adc5356eecd1b97aae24084f0ef2f4600a
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date:   Fri Dec 17 18:28:53 2010 +0900

    	* plugins/gtk+/glade-gtk.c: Fixed crashes when textview's buffer is deleted, fix
    	  by Martin Schlemmer, bug 609748.

 ChangeLog                |    3 +++
 plugins/gtk+/glade-gtk.c |   23 ++++++++++++++++++++---
 2 files changed, 23 insertions(+), 3 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index b97e782..2ab22e3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -18,6 +18,9 @@
 	  - Defensively avoid crash when setting entry icon tooltips
 	  - Add version check macro to compile with GTK+ 2.20
 
+	* plugins/gtk+/glade-gtk.c: Fixed crashes when textview's buffer is deleted, fix
+	  by Martin Schlemmer, bug 609748.
+
 2010-12-16  Tristan Van Berkom <tristanvb openismus com>
 
 	* plugins/gtk+/glade-gtk.c: Avoid using gtk_combo_box_set_entry_text_column directly (build
diff --git a/plugins/gtk+/glade-gtk.c b/plugins/gtk+/glade-gtk.c
index da2a154..d5c02bf 100644
--- a/plugins/gtk+/glade-gtk.c
+++ b/plugins/gtk+/glade-gtk.c
@@ -8792,7 +8792,8 @@ glade_gtk_text_view_changed (GtkTextBuffer *buffer, GladeWidget *gtext)
 	GladeProperty *prop;
 	gchar *text = NULL;
 	
-	g_object_get (buffer, "text", &text, NULL);
+	if (buffer)
+ 		g_object_get (buffer, "text", &text, NULL);
 
 	project = glade_widget_get_project (gtext);
 
@@ -8853,6 +8854,21 @@ glade_gtk_text_view_post_create (GladeWidgetAdaptor *adaptor,
 }
 
 static void
+glade_gtk_text_view_set_buffer (GObject *object, const GValue *value)
+{
+	GtkTextBuffer *buffy;
+	GladeWidget *gtext;
+
+	gtext = glade_widget_get_from_gobject (object);
+	
+	if ((buffy = g_value_get_object (value)) == NULL) return;
+
+	g_signal_handlers_block_by_func (buffy, glade_gtk_text_view_changed, gtext);
+	gtk_text_view_set_buffer (GTK_TEXT_VIEW (object), buffy);
+	g_signal_handlers_unblock_by_func (buffy, glade_gtk_text_view_changed, gtext);
+}
+
+static void
 glade_gtk_text_view_set_text (GObject *object, const GValue *value)
 {
 	GtkTextBuffer *buffy;
@@ -8860,15 +8876,14 @@ glade_gtk_text_view_set_text (GObject *object, const GValue *value)
 	const gchar *text;
 	GladeProject *project;
 
-	g_return_if_fail (GTK_IS_TEXT_VIEW (object));
 	gtext = glade_widget_get_from_gobject (object);
-	g_return_if_fail (GLADE_IS_WIDGET (gtext));
 
 	project = glade_widget_get_project (gtext);
 	if (glade_project_get_format (project) != GLADE_PROJECT_FORMAT_LIBGLADE)
 		return;
 	
 	buffy = gtk_text_view_get_buffer (GTK_TEXT_VIEW (object));
+	if (buffy == NULL) return;
 	
 	if ((text = g_value_get_string (value)) == NULL) return;
 
@@ -8885,6 +8900,8 @@ glade_gtk_text_view_set_property (GladeWidgetAdaptor *adaptor,
 {
 	if (!strcmp (id, "text"))
 		glade_gtk_text_view_set_text (object, value);
+	else if (!strcmp (id, "buffer"))
+		glade_gtk_text_view_set_buffer (object, value);
 	else
 		GWA_GET_CLASS (GTK_TYPE_CONTAINER)->set_property (adaptor,
 								  object,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]