]> Pileus Git - ~andy/gtk/commitdiff
stylecontext: Notify widget directly of changes
authorBenjamin Otte <otte@redhat.com>
Sun, 18 Mar 2012 23:25:31 +0000 (00:25 +0100)
committerBenjamin Otte <otte@redhat.com>
Tue, 17 Apr 2012 06:59:08 +0000 (08:59 +0200)
This way, we don't need to g_signal_connect(), which saves a bunch of
memory and performance.

gtk/gtkstylecontext.c
gtk/gtkwidget.c
gtk/gtkwidgetprivate.h

index 9d6608e11b87c19be287d535dbf9de98893c3e53..8192a34a6dfd3df89d34b350703db98cf30e60cc 100644 (file)
@@ -410,6 +410,15 @@ static GtkSymbolicColor *
 
 G_DEFINE_TYPE (GtkStyleContext, gtk_style_context, G_TYPE_OBJECT)
 
+static void
+gtk_style_context_real_changed (GtkStyleContext *context)
+{
+  GtkStyleContextPrivate *priv = context->priv;
+
+  if (priv->widget)
+    _gtk_widget_style_context_invalidated (priv->widget);
+}
+
 static void
 gtk_style_context_class_init (GtkStyleContextClass *klass)
 {
@@ -419,6 +428,8 @@ gtk_style_context_class_init (GtkStyleContextClass *klass)
   object_class->set_property = gtk_style_context_impl_set_property;
   object_class->get_property = gtk_style_context_impl_get_property;
 
+  klass->changed = gtk_style_context_real_changed;
+
   signals[CHANGED] =
     g_signal_new (I_("changed"),
                   G_TYPE_FROM_CLASS (object_class),
index 43da8ab50395fd52b17b457eabc3995aa4b6ddc2..1abd81491ecc0e5307745a25778837d4f694bf70 100644 (file)
@@ -14072,12 +14072,9 @@ gtk_widget_get_path (GtkWidget *widget)
   return widget->priv->path;
 }
 
-static void
-style_context_changed (GtkStyleContext *context,
-                       gpointer         user_data)
+void
+_gtk_widget_style_context_invalidated (GtkWidget *widget)
 {
-  GtkWidget *widget = user_data;
-
   if (gtk_widget_get_realized (widget))
     g_signal_emit (widget, widget_signals[STYLE_UPDATED], 0);
   else
@@ -14132,8 +14129,6 @@ gtk_widget_get_style_context (GtkWidget *widget)
                                       gtk_widget_get_style_context (priv->parent));
 
       _gtk_style_context_set_widget (priv->context, widget);
-      g_signal_connect (widget->priv->context, "changed",
-                        G_CALLBACK (style_context_changed), widget);
     }
 
   return widget->priv->context;
index 9774c13fe8495c9d04077fc81d0cfa3617d55008..608cf7c3e972e22bb3ca79f26bb77a8692577f83 100644 (file)
@@ -173,6 +173,8 @@ void              _gtk_widget_set_captured_event_handler (GtkWidget
 gboolean          _gtk_widget_captured_event               (GtkWidget *widget,
                                                             GdkEvent  *event);
 
+void              _gtk_widget_style_context_invalidated    (GtkWidget *widget);
+
 G_END_DECLS
 
 #endif /* __GTK_WIDGET_PRIVATE_H__ */