Hello
this small patch is a cleanup for undo/redo button stuff in glade-app

gcc4 complains about a punned pointer or something like that
in glade_util_draw_nodes_idle()
this fix it just check it does not complain in gcc3 :D

-       gdk_window_get_user_data (expose_win, (gpointer *)&expose_widget);
+       gdk_window_get_user_data (expose_win, (gpointer)&expose_widget);


2006-01-25  Juan Pablo Ugarte <[EMAIL PROTECTED]>

        * glade-app.c: undo/redo buttons cleanup.
          Use of "destroy" signal instead of week pointers and
          use update-ui default handler to update buttons.

        * glade-project-window.c: glade_project_window_update_ui() chain up
          with GLADE_APP_CLASS update-ui handler.
Index: src/glade-app.c
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-app.c,v
retrieving revision 1.30
diff -u -r1.30 glade-app.c
--- src/glade-app.c	24 Jan 2006 18:58:57 -0000	1.30
+++ src/glade-app.c	25 Jan 2006 19:54:44 -0000
@@ -151,6 +151,51 @@
 }
 
 static void
+glade_app_refresh_undo_redo_button (GladeApp *app,
+				    GtkWidget *button,
+				    gboolean undo)
+{
+	GladeCommand *command = NULL;
+	static GtkTooltips *button_tips = NULL;
+	GladeProject *project;
+	gchar *desc;
+
+	if (button_tips == NULL)
+		button_tips = gtk_tooltips_new ();
+	
+	if ((project = glade_app_get_active_project (app)) != NULL)
+	{
+		if (undo)
+			command = glade_command_next_undo_item (project);
+		else
+			command = glade_command_next_redo_item (project);
+	}
+
+	/* Change tooltips */
+	desc = g_strdup_printf ((undo) ? _("Undo: %s") : _("Redo: %s"),
+			command ? command->description : _("the last action"));
+	gtk_tooltips_set_tip (GTK_TOOLTIPS (button_tips), button, desc, NULL);
+	g_free (desc);
+
+	/* Set sensitivity on the button */
+	gtk_widget_set_sensitive (button, command != NULL);
+}
+
+void
+glade_app_update_ui_default (GladeApp *app)
+{
+	GList *list;
+	
+	for (list = app->priv->undo_list; list; list = list->next)
+		if (list->data)
+			glade_app_refresh_undo_redo_button (app, list->data, TRUE);
+
+	for (list = app->priv->redo_list; list; list = list->next)
+		if (list->data)
+			glade_app_refresh_undo_redo_button (app, list->data, FALSE);
+}
+
+static void
 glade_app_class_init (GladeAppClass * klass)
 {
 	GObjectClass *object_class;
@@ -162,7 +207,7 @@
 	object_class->dispose   = glade_app_dispose;
 	object_class->finalize  = glade_app_finalize;
 
-	klass->update_ui_signal = NULL;
+	klass->update_ui_signal = glade_app_update_ui_default;
 	klass->show_properties  = NULL;
 	klass->hide_properties  = NULL;
 
@@ -333,64 +378,6 @@
 }
 
 static void
-glade_app_refresh_undo_redo_button (GladeApp *app,
-				    GtkWidget *button,
-				    gboolean undo)
-{
-	GladeCommand *command = NULL;
-	static GtkTooltips *button_tips = NULL;
-	GladeProject *project;
-	gchar *desc;
-
-	if (button_tips == NULL)
-		button_tips = gtk_tooltips_new ();
-	
-	if ((project = glade_app_get_active_project (app)) != NULL)
-	{
-		if (undo)
-			command = glade_command_next_undo_item (project);
-		else
-			command = glade_command_next_redo_item (project);
-	}
-
-	/* Change tooltips */
-	desc = g_strdup_printf ((undo) ? _("Undo: %s") : _("Redo: %s"),
-			command ? command->description : _("the last action"));
-	gtk_tooltips_set_tip (GTK_TOOLTIPS (button_tips), button, desc, NULL);
-	g_free (desc);
-
-	/* Set sensitivity on the button */
-	gtk_widget_set_sensitive (button, command != NULL);
-}
-
-void
-glade_app_undo_redo_button_update_ui (GladeApp *app)
-{
-	GList *list;
-	gboolean clean_undo_list = FALSE, clean_redo_list = FALSE;
-	
-	for (list = app->priv->undo_list; list; list = list->next)
-	{
-		if (list->data)
-			glade_app_refresh_undo_redo_button (app, list->data, TRUE);
-		else
-			clean_undo_list = TRUE;
-	}
-	if (clean_undo_list)
-		app->priv->undo_list = g_list_remove_all (app->priv->undo_list, NULL);
-		
-	for (list = app->priv->redo_list; list; list = list->next)
-	{
-		if (list->data)
-			glade_app_refresh_undo_redo_button (app, list->data, FALSE);
-		else
-			clean_redo_list = TRUE;
-	}
-	if (clean_redo_list)
-		app->priv->redo_list = g_list_remove_all (app->priv->redo_list, NULL);
-}
-
-static void
 glade_app_init (GladeApp *app)
 {
 	static gboolean initialized = FALSE;
@@ -456,9 +443,6 @@
 	
 	/* Undo/Redo button list */
 	app->priv->undo_list = app->priv->redo_list = NULL;
-	g_signal_connect (app, "update-ui", 
-			  G_CALLBACK (glade_app_undo_redo_button_update_ui),
-			  NULL);	
 }
 
 GType
@@ -872,6 +856,20 @@
 	app->priv->accel_group = accel_group;
 }
 
+static gboolean
+glade_app_undo_button_destroyed (GtkWidget *button, GladeApp *app)
+{
+	app->priv->undo_list = g_list_remove (app->priv->undo_list, button);
+	return FALSE;
+}
+
+static gboolean
+glade_app_redo_button_destroyed (GtkWidget *button, GladeApp *app)
+{
+	app->priv->redo_list = g_list_remove (app->priv->redo_list, button);
+	return FALSE;
+}
+
 static GtkWidget *
 glade_app_undo_redo_button_new (GladeApp *app, gboolean undo)
 {
@@ -889,12 +887,16 @@
 	if (undo)
 	{
 		app->priv->undo_list = g_list_prepend (app->priv->undo_list, button);
-		g_object_add_weak_pointer (G_OBJECT (button), &app->priv->undo_list->data);
+		g_signal_connect (button, "destroy",
+				  G_CALLBACK (glade_app_undo_button_destroyed),
+				  app);
 	}
 	else
 	{
 		app->priv->redo_list = g_list_prepend (app->priv->redo_list, button);
-		g_object_add_weak_pointer (G_OBJECT (button), &app->priv->redo_list->data);
+		g_signal_connect (button, "destroy",
+				  G_CALLBACK (glade_app_redo_button_destroyed),
+				  app);
 	}
 	
 	glade_app_refresh_undo_redo_button (app, button, undo);
@@ -902,12 +904,24 @@
 	return button;
 }
 
+/*
+ * glade_app_undo_button_new:
+ *
+ * Creates a new GtkButton undo widget.
+ * The button will be automatically updated with @app's undo stack.
+ */
 GtkWidget *
 glade_app_undo_button_new (GladeApp *app)
 {
 	return glade_app_undo_redo_button_new (app, TRUE);
 }
 
+/*
+ * glade_app_redo_button_new:
+ *
+ * Creates a new GtkButton redo widget.
+ * The button will be automatically updated with @app's redo stack.
+ */
 GtkWidget *
 glade_app_redo_button_new (GladeApp *app)
 {
Index: src/glade-project-window.c
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-project-window.c,v
retrieving revision 1.126
diff -u -r1.126 glade-project-window.c
--- src/glade-project-window.c	25 Jan 2006 02:14:47 -0000	1.126
+++ src/glade-project-window.c	25 Jan 2006 19:54:46 -0000
@@ -1592,6 +1592,10 @@
 glade_project_window_update_ui (GladeApp *app)
 {
 	GladeProjectWindow *gpw = GLADE_PROJECT_WINDOW (app);
+	
+	/* Chain Up */
+	GLADE_APP_CLASS (parent_class)->update_ui_signal (app);
+	
 	gpw_refresh_title (gpw);
 	glade_project_window_refresh_undo_redo (gpw);
 }
Index: src/glade-utils.c
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-utils.c,v
retrieving revision 1.58
diff -u -r1.58 glade-utils.c
--- src/glade-utils.c	24 Jan 2006 18:31:14 -0000	1.58
+++ src/glade-utils.c	25 Jan 2006 19:54:55 -0000
@@ -725,7 +725,7 @@
 		goto out;
 
 	/* Find the corresponding GtkWidget */
-	gdk_window_get_user_data (expose_win, (gpointer *)&expose_widget);
+	gdk_window_get_user_data (expose_win, (gpointer)&expose_widget);
 
 	gc = expose_widget->style->black_gc;
_______________________________________________
Glade-devel maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/glade-devel

Reply via email to