[gtk+/gtk-style-context] GtkWidget: Add the style-updated signal



commit 47ab980cc0db06a11c6cfe919dccb77f4eec638f
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sat Sep 11 12:36:54 2010 +0200

    GtkWidget: Add the style-updated signal
    
    This signal is emitted whenever the widget's style changes.

 gtk/gtkwidget.c |   35 +++++++++++++++++++++++++++++++++++
 gtk/gtkwidget.h |    2 ++
 2 files changed, 37 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 926c894..58052c5 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -202,6 +202,7 @@ enum {
   KEYNAV_FAILED,
   DRAG_FAILED,
   DAMAGE_EVENT,
+  STYLE_UPDATED,
   LAST_SIGNAL
 };
 
@@ -278,6 +279,7 @@ static gboolean gtk_widget_real_query_tooltip    (GtkWidget         *widget,
 						  gint               y,
 						  gboolean           keyboard_tip,
 						  GtkTooltip        *tooltip);
+static void     gtk_widget_real_style_updated    (GtkWidget         *widget);
 static gboolean gtk_widget_real_show_help        (GtkWidget         *widget,
                                                   GtkWidgetHelpType  help_type);
 
@@ -566,6 +568,7 @@ gtk_widget_class_init (GtkWidgetClass *klass)
   klass->can_activate_accel = gtk_widget_real_can_activate_accel;
   klass->grab_broken_event = NULL;
   klass->query_tooltip = gtk_widget_real_query_tooltip;
+  klass->style_updated = gtk_widget_real_style_updated;
 
   klass->show_help = gtk_widget_real_show_help;
   
@@ -989,6 +992,16 @@ gtk_widget_class_init (GtkWidgetClass *klass)
 		  _gtk_marshal_VOID__OBJECT,
 		  G_TYPE_NONE, 1,
 		  GTK_TYPE_STYLE);
+
+  widget_signals[STYLE_UPDATED] =
+    g_signal_new (I_("style-updated"),
+                  G_TYPE_FROM_CLASS (gobject_class),
+                  G_SIGNAL_RUN_FIRST,
+                  G_STRUCT_OFFSET (GtkWidgetClass, style_updated),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__VOID,
+                  G_TYPE_NONE, 0);
+
 /**
  * GtkWidget::direction-changed:
  * @widget: the object on which the signal is emitted
@@ -5297,6 +5310,17 @@ gtk_widget_real_query_tooltip (GtkWidget  *widget,
   return FALSE;
 }
 
+static void
+gtk_widget_real_style_updated (GtkWidget *widget)
+{
+  GtkStyleContext *context;
+
+  context = g_object_get_qdata (G_OBJECT (widget),
+                                quark_style_context);
+  if (context)
+    gtk_style_context_invalidate (context);
+}
+
 static gboolean
 gtk_widget_real_show_help (GtkWidget        *widget,
                            GtkWidgetHelpType help_type)
@@ -11709,6 +11733,15 @@ gtk_widget_get_path (GtkWidget *widget)
   return path;
 }
 
+static void
+style_context_changed (GtkStyleContext *context,
+                       gpointer         user_data)
+{
+  GtkWidget *widget = user_data;
+
+  g_signal_emit (widget, widget_signals[STYLE_UPDATED], 0);
+}
+
 GtkStyleContext *
 gtk_widget_get_style_context (GtkWidget *widget)
 {
@@ -11730,6 +11763,8 @@ gtk_widget_get_style_context (GtkWidget *widget)
                               "direction", gtk_widget_get_direction (widget),
                               NULL);
 
+      g_signal_connect (context, "changed",
+                        G_CALLBACK (style_context_changed), widget);
 
       g_object_set_qdata_full (G_OBJECT (widget),
                                quark_style_context, context,
diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h
index f42e072..8deda54 100644
--- a/gtk/gtkwidget.h
+++ b/gtk/gtkwidget.h
@@ -524,6 +524,8 @@ struct _GtkWidgetClass
 				       gint        y,
 				       gboolean    keyboard_tooltip,
 				       GtkTooltip *tooltip);
+  void (* style_updated) (GtkWidget *widget);
+
   /* Signals without a C default handler class slot:
    * gboolean	(*damage_event)	(GtkWidget      *widget,
    *                             GdkEventExpose *event);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]