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