glade3 r1711 - in trunk: . gladeui



Author: tvb
Date: Sun Mar  9 21:09:07 2008
New Revision: 1711
URL: http://svn.gnome.org/viewvc/glade3?rev=1711&view=rev

Log:

	* gladeui/glade-base-editor.c: Made sure idle handlers werent
	  updating treeviews after the object is destroyed (also bug 506713).



Modified:
   trunk/ChangeLog
   trunk/gladeui/glade-base-editor.c
   trunk/gladeui/glade-editor-property.c
   trunk/gladeui/glade-editor.c

Modified: trunk/gladeui/glade-base-editor.c
==============================================================================
--- trunk/gladeui/glade-base-editor.c	(original)
+++ trunk/gladeui/glade-base-editor.c	Sun Mar  9 21:09:07 2008
@@ -78,6 +78,8 @@
 	gint row;
 	
 	gboolean updating_treeview;
+
+	guint properties_idle;
 };
 
 typedef struct _GladeBaseEditorSignal     GladeBaseEditorSignal;
@@ -350,7 +352,9 @@
 	GObject *child;
 	GladeWidget *gchild;
 
-	if (! glade_base_editor_get_child_selected (editor, &iter))
+	g_return_if_fail (GTK_IS_TREE_VIEW (treeview));
+
+	if (!glade_base_editor_get_child_selected (editor, &iter))
 		return;
 
 	glade_base_editor_clear (editor);
@@ -372,15 +376,21 @@
 static gboolean
 glade_base_editor_update_properties_idle (gpointer data)
 {
-       glade_base_editor_treeview_cursor_changed (NULL, (GladeBaseEditor *)data);
-       return FALSE;
+	GladeBaseEditor *editor = (GladeBaseEditor *)data;
+	glade_base_editor_treeview_cursor_changed (NULL, editor);
+	editor->priv->properties_idle = 0;
+	return FALSE;
 }
 
 
 static void 
 glade_base_editor_update_properties (GladeBaseEditor *editor)
 {
-       g_idle_add (glade_base_editor_update_properties_idle, editor);
+	g_return_if_fail (GLADE_IS_BASE_EDITOR (editor));
+
+	if (!editor->priv->properties_idle)
+		editor->priv->properties_idle = 
+			g_idle_add (glade_base_editor_update_properties_idle, editor);
 }
 
 static void
@@ -993,6 +1003,12 @@
 	
 	g_signal_handlers_disconnect_by_func (e->project,
 			glade_base_editor_project_changed, editor);
+
+
+	if (e->properties_idle)
+		g_source_remove (e->properties_idle);
+	e->properties_idle = 0;
+
 }
 
 static void

Modified: trunk/gladeui/glade-editor-property.c
==============================================================================
--- trunk/gladeui/glade-editor-property.c	(original)
+++ trunk/gladeui/glade-editor-property.c	Sun Mar  9 21:09:07 2008
@@ -1835,6 +1835,8 @@
 		gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (swindow), TRUE, TRUE, 0); 
 
 		gtk_widget_show_all (swindow);
+		
+		/*  XXX Use changed signal directly !!! */
 
 		g_signal_connect (G_OBJECT (eprop_text->text_entry), "focus-out-event",
 				  G_CALLBACK (glade_eprop_text_text_view_focus_out),

Modified: trunk/gladeui/glade-editor.c
==============================================================================
--- trunk/gladeui/glade-editor.c	(original)
+++ trunk/gladeui/glade-editor.c	Sun Mar  9 21:09:07 2008
@@ -646,6 +646,8 @@
 	GladeEditorTable *table;
 	GList *list;
 
+	g_return_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor));
+
 	for (list = editor->widget_tables; list; list = list->next)
 	{
 		table = list->data;
@@ -741,7 +743,15 @@
 void
 glade_editor_update_widget_name (GladeEditor *editor)
 {
-	GladeEditorTable *table = glade_editor_get_table_from_class
+	GladeEditorTable *table;
+
+	/* it can happen that a widget name is changing that is only
+	 * available in a custom editor so we have no table
+	 */
+	if (!editor->loaded_adaptor)
+		return;
+
+	table = glade_editor_get_table_from_class
 		(editor, editor->loaded_adaptor, TABLE_TYPE_GENERAL);
 
 	g_signal_handlers_block_by_func (G_OBJECT (table->name_entry), glade_editor_widget_name_changed, editor);



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