From c6b2e47931264c575fbe98ce2da279be76200ccb Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Wed, 24 Nov 2010 01:30:59 +0100 Subject: [PATCH] Let gtk_widget_get_path() correct early calls during init(). --- gtk/gtkwidget.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 75e01df78b..838e425432 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -13772,6 +13772,18 @@ gtk_widget_get_path (GtkWidget *widget) { g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); + /* As strange as it may seem, this may happen on object construction. + * init() implementations of parent types may eventually call this function, + * each with its corresponding GType, which could leave a child + * implementation with a wrong widget type in the widget path + */ + if (widget->priv->path && + G_OBJECT_TYPE (widget) != gtk_widget_path_get_widget_type (widget->priv->path)) + { + gtk_widget_path_free (widget->priv->path); + widget->priv->path = NULL; + } + if (!widget->priv->path) { GtkWidget *parent; @@ -13795,6 +13807,10 @@ gtk_widget_get_path (GtkWidget *widget) if (widget->priv->name) gtk_widget_path_iter_set_name (widget->priv->path, pos, widget->priv->name); + + if (widget->priv->context) + gtk_style_context_set_path (widget->priv->context, + widget->priv->path); } return widget->priv->path; @@ -13839,6 +13855,13 @@ gtk_widget_get_style_context (GtkWidget *widget) gtk_style_context_set_path (widget->priv->context, widget->priv->path); } + else + { + /* Force widget path regeneration if needed, the + * context will be updated within this function. + */ + gtk_widget_get_path (widget); + } return widget->priv->context; }