forked from AuroraMiddleware/gtk
widget: Create the CssNode
... and pass it to the style context instead of having the style context create it for us.
This commit is contained in:
parent
28043f0a92
commit
ffb410f11e
@ -551,36 +551,21 @@ gtk_style_context_new (void)
|
||||
return g_object_new (GTK_TYPE_STYLE_CONTEXT, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
_gtk_style_context_set_widget (GtkStyleContext *context,
|
||||
GtkWidget *widget)
|
||||
GtkStyleContext *
|
||||
gtk_style_context_new_for_node (GtkCssNode *node)
|
||||
{
|
||||
GtkStyleContextPrivate *priv;
|
||||
GtkStyleContext *context;
|
||||
|
||||
g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
|
||||
g_return_if_fail (widget == NULL || GTK_IS_WIDGET (widget));
|
||||
g_return_if_fail (!gtk_style_context_is_saved (context));
|
||||
g_return_val_if_fail (GTK_IS_CSS_NODE (node), NULL);
|
||||
|
||||
context = gtk_style_context_new ();
|
||||
|
||||
priv = context->priv;
|
||||
|
||||
if (!GTK_IS_CSS_WIDGET_NODE (priv->cssnode))
|
||||
{
|
||||
g_object_unref (priv->cssnode);
|
||||
priv->cssnode = gtk_css_widget_node_new (widget);
|
||||
gtk_css_node_set_state (priv->cssnode, GTK_STATE_FLAG_DIR_LTR);
|
||||
}
|
||||
priv->cssnode = g_object_ref (node);
|
||||
|
||||
if (widget)
|
||||
{
|
||||
gtk_css_node_set_widget_type (priv->cssnode, G_OBJECT_TYPE (widget));
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_css_node_set_widget_type (priv->cssnode, G_TYPE_NONE);
|
||||
gtk_css_widget_node_widget_destroyed (GTK_CSS_WIDGET_NODE (priv->cssnode));
|
||||
}
|
||||
|
||||
gtk_css_node_invalidate (gtk_style_context_get_root (context), GTK_CSS_CHANGE_ANY_SELF);
|
||||
return context;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1166,9 +1151,11 @@ gtk_style_context_set_parent (GtkStyleContext *context,
|
||||
|
||||
if (parent)
|
||||
{
|
||||
GtkCssNode *root = gtk_style_context_get_root (context);
|
||||
g_object_ref (parent);
|
||||
gtk_css_node_set_parent (gtk_style_context_get_root (context),
|
||||
gtk_style_context_get_root (parent));
|
||||
|
||||
if (gtk_css_node_get_parent (root) == NULL)
|
||||
gtk_css_node_set_parent (root, gtk_style_context_get_root (parent));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -28,8 +28,8 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
void _gtk_style_context_set_widget (GtkStyleContext *context,
|
||||
GtkWidget *widget);
|
||||
GtkStyleContext *gtk_style_context_new_for_node (GtkCssNode *node);
|
||||
|
||||
GtkCssNode * gtk_style_context_get_root (GtkStyleContext *context);
|
||||
void gtk_style_context_set_id (GtkStyleContext *context,
|
||||
const char *id);
|
||||
|
@ -60,6 +60,7 @@
|
||||
#include "gtksizerequest.h"
|
||||
#include "gtkstylecontextprivate.h"
|
||||
#include "gtkcssprovider.h"
|
||||
#include "gtkcsswidgetnodeprivate.h"
|
||||
#include "gtkmodifierstyle.h"
|
||||
#include "gtkversion.h"
|
||||
#include "gtkdebug.h"
|
||||
@ -557,6 +558,7 @@ struct _GtkWidgetPrivate
|
||||
* the font to use for text.
|
||||
*/
|
||||
GtkStyle *style;
|
||||
GtkCssNode *cssnode;
|
||||
GtkStyleContext *context;
|
||||
|
||||
/* Widget's path for styling */
|
||||
@ -733,7 +735,8 @@ struct _GtkStateData
|
||||
static void gtk_widget_base_class_init (gpointer g_class);
|
||||
static void gtk_widget_class_init (GtkWidgetClass *klass);
|
||||
static void gtk_widget_base_class_finalize (GtkWidgetClass *klass);
|
||||
static void gtk_widget_init (GtkWidget *widget);
|
||||
static void gtk_widget_init (GTypeInstance *instance,
|
||||
gpointer g_class);
|
||||
static void gtk_widget_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
@ -992,7 +995,7 @@ gtk_widget_get_type (void)
|
||||
NULL, /* class_init */
|
||||
sizeof (GtkWidget),
|
||||
0, /* n_preallocs */
|
||||
(GInstanceInitFunc) gtk_widget_init,
|
||||
gtk_widget_init,
|
||||
NULL, /* value_table */
|
||||
};
|
||||
|
||||
@ -4454,8 +4457,9 @@ _gtk_widget_cancel_sequence (GtkWidget *widget,
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_widget_init (GtkWidget *widget)
|
||||
gtk_widget_init (GTypeInstance *instance, gpointer g_class)
|
||||
{
|
||||
GtkWidget *widget = GTK_WIDGET (instance);
|
||||
GtkWidgetPrivate *priv;
|
||||
|
||||
widget->priv = gtk_widget_get_instance_private (widget);
|
||||
@ -4506,6 +4510,11 @@ gtk_widget_init (GtkWidget *widget)
|
||||
|
||||
_gtk_size_request_cache_init (&priv->requests);
|
||||
|
||||
priv->cssnode = gtk_css_widget_node_new (widget);
|
||||
gtk_css_node_set_state (priv->cssnode, GTK_STATE_FLAG_DIR_LTR);
|
||||
/* need to set correct type here, and only class has the correct type here */
|
||||
gtk_css_node_set_widget_type (priv->cssnode, G_TYPE_FROM_CLASS (g_class));
|
||||
|
||||
G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
|
||||
priv->style = gtk_widget_get_default_style ();
|
||||
G_GNUC_END_IGNORE_DEPRECATIONS;
|
||||
@ -4738,6 +4747,7 @@ gtk_widget_unparent (GtkWidget *widget)
|
||||
gtk_widget_unset_state_flags (widget, GTK_STATE_FLAG_BACKDROP);
|
||||
if (priv->context)
|
||||
gtk_style_context_set_parent (priv->context, NULL);
|
||||
gtk_css_node_set_parent (widget->priv->cssnode, NULL);
|
||||
|
||||
_gtk_widget_update_parent_muxer (widget);
|
||||
|
||||
@ -9524,6 +9534,8 @@ gtk_widget_set_parent (GtkWidget *widget,
|
||||
data.flags_to_unset = 0;
|
||||
gtk_widget_propagate_state (widget, &data);
|
||||
|
||||
if (gtk_css_node_get_parent (widget->priv->cssnode) == NULL)
|
||||
gtk_css_node_set_parent (widget->priv->cssnode, parent->priv->cssnode);
|
||||
if (priv->context)
|
||||
gtk_style_context_set_parent (priv->context,
|
||||
gtk_widget_get_style_context (parent));
|
||||
@ -12175,11 +12187,11 @@ gtk_widget_finalize (GObject *object)
|
||||
if (priv->path)
|
||||
gtk_widget_path_free (priv->path);
|
||||
|
||||
gtk_css_widget_node_widget_destroyed (GTK_CSS_WIDGET_NODE (priv->cssnode));
|
||||
g_object_unref (priv->cssnode);
|
||||
|
||||
if (priv->context)
|
||||
{
|
||||
_gtk_style_context_set_widget (priv->context, NULL);
|
||||
g_object_unref (priv->context);
|
||||
}
|
||||
|
||||
_gtk_size_request_cache_free (&priv->requests);
|
||||
|
||||
@ -16424,7 +16436,7 @@ gtk_widget_get_style_context (GtkWidget *widget)
|
||||
GdkScreen *screen;
|
||||
GdkFrameClock *frame_clock;
|
||||
|
||||
priv->context = gtk_style_context_new ();
|
||||
priv->context = gtk_style_context_new_for_node (priv->cssnode);
|
||||
|
||||
gtk_style_context_set_id (priv->context, priv->name);
|
||||
gtk_style_context_set_state (priv->context, priv->state_flags);
|
||||
@ -16438,8 +16450,6 @@ gtk_widget_get_style_context (GtkWidget *widget)
|
||||
if (frame_clock)
|
||||
gtk_style_context_set_frame_clock (priv->context, frame_clock);
|
||||
|
||||
_gtk_style_context_set_widget (priv->context, widget);
|
||||
|
||||
if (priv->parent)
|
||||
gtk_style_context_set_parent (priv->context,
|
||||
gtk_widget_get_style_context (priv->parent));
|
||||
|
Loading…
Reference in New Issue
Block a user