From 382ce2f13825c6b51b8b62db56a5e8ab9abee286 Mon Sep 17 00:00:00 2001 From: Kristian Rietveld Date: Wed, 28 May 2008 14:00:31 +0000 Subject: [PATCH] Bug 504087 - make gtk_tooltip_set_custom a no-op for setting the current 2008-05-28 Kristian Rietveld Bug 504087 - make gtk_tooltip_set_custom a no-op for setting the current widget again. * gtk/gtktooltip.c (gtk_tooltip_set_custom), (gtk_tooltip_reset), (gtk_tooltip_run_requery): use a custom_was_reset field to check if the custom widget is set again in the query-tooltip callback; if not, we set it to NULL. Based on a patch by Xavier Claessens, insightful comments from Jean-Yves Lefort and Christian Persch. svn path=/trunk/; revision=20215 --- ChangeLog | 12 ++++++++++++ gtk/gtktooltip.c | 22 +++++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 515dce5048..963565bbf6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2008-05-28 Kristian Rietveld + + Bug 504087 - make gtk_tooltip_set_custom a no-op for setting the + current widget again. + + * gtk/gtktooltip.c (gtk_tooltip_set_custom), + (gtk_tooltip_reset), (gtk_tooltip_run_requery): use a + custom_was_reset field to check if the custom widget is set again in + the query-tooltip callback; if not, we set it to NULL. Based on a + patch by Xavier Claessens, insightful comments from Jean-Yves Lefort + and Christian Persch. + 2008-05-28 Michael Natterer * modules/printbackends/cups/gtkcupsutils.c diff --git a/gtk/gtktooltip.c b/gtk/gtktooltip.c index ec283f68ba..f9d1b8ba70 100644 --- a/gtk/gtktooltip.c +++ b/gtk/gtktooltip.c @@ -71,6 +71,7 @@ struct _GtkTooltip guint browse_mode_enabled : 1; guint keyboard_mode_enabled : 1; guint tip_area_set : 1; + guint custom_was_reset : 1; }; struct _GtkTooltipClass @@ -349,6 +350,15 @@ gtk_tooltip_set_custom (GtkTooltip *tooltip, if (custom_widget) g_return_if_fail (GTK_IS_WIDGET (custom_widget)); + /* The custom widget has been updated from the query-tooltip + * callback, so we do not want to reset the custom widget later on. + */ + tooltip->custom_was_reset = TRUE; + + /* No need to do anything if the custom widget stays the same */ + if (tooltip->custom_widget == custom_widget) + return; + if (tooltip->custom_widget) { GtkWidget *custom = tooltip->custom_widget; @@ -440,8 +450,12 @@ gtk_tooltip_reset (GtkTooltip *tooltip) { gtk_tooltip_set_markup (tooltip, NULL); gtk_tooltip_set_icon (tooltip, NULL); - gtk_tooltip_set_custom (tooltip, NULL); gtk_tooltip_set_tip_area (tooltip, NULL); + + /* See if the custom widget is again set from the query-tooltip + * callback. + */ + tooltip->custom_was_reset = FALSE; } static void @@ -792,6 +806,12 @@ gtk_tooltip_run_requery (GtkWidget **widget, } while (*widget); + /* If the custom widget was not reset in the query-tooltip + * callback, we clear it here. + */ + if (!tooltip->custom_was_reset) + gtk_tooltip_set_custom (tooltip, NULL); + return return_value; }