]> Pileus Git - ~andy/gtk/commitdiff
API: Add gtk_widget_path_append_for_widget()
authorBenjamin Otte <otte@redhat.com>
Wed, 25 May 2011 18:42:27 +0000 (20:42 +0200)
committerBenjamin Otte <otte@redhat.com>
Thu, 2 Jun 2011 00:03:50 +0000 (02:03 +0200)
Includes a bunch of header shuffling so we can use GtkWidget* in
gtkwidgetpath.h

gtk/gtkstyle.h
gtk/gtkwidget.c
gtk/gtkwidgetpath.h

index 5396b2674f49f84b0a5922baaa9b1bce220371f7..e06f69635faff659a99dc383c0fd75dbbc733ba8 100644 (file)
@@ -61,11 +61,6 @@ typedef gboolean (*GtkRcPropertyParser) (const GParamSpec *pspec,
                                         const GString    *rc_string,
                                         GValue           *property_value);
 
-/* We make this forward declaration here, since we pass
- * GtkWidget's to the draw functions.
- */
-typedef struct _GtkWidget      GtkWidget;
-
 /**
  * GTK_STYLE_ATTACHED:
  * @style: a #GtkStyle.
index c2c68ba913857a08cb01b77e5afe36e6f3226d2f..9a598107da11b00ca49f4c6c957b03998a7eb968 100644 (file)
@@ -14223,6 +14223,52 @@ _gtk_widget_get_sizegroups (GtkWidget    *widget)
   return NULL;
 }
 
+/**
+ * gtk_widget_path_append_for_widget:
+ * @path: a widget path
+ * @widget: the widget to append to the widget path
+ *
+ * Appends the data from @widget to the widget hierarchy represented
+ * by @path. This function is a shortcut for adding information from
+ * @widget to the given @path. This includes setting the name or
+ * adding the style classes from @widget.
+ *
+ * Returns: the position where the data was inserted
+ *
+ * Since: 3.2
+ **/
+gint
+gtk_widget_path_append_for_widget (GtkWidgetPath *path,
+                                   GtkWidget     *widget)
+{
+  gint pos;
+
+  g_return_val_if_fail (path != NULL, 0);
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), 0);
+
+  pos = gtk_widget_path_append_type (path, G_OBJECT_TYPE (widget));
+
+  if (widget->priv->name)
+    gtk_widget_path_iter_set_name (path, pos, widget->priv->name);
+
+  if (widget->priv->context)
+    {
+      GList *classes, *l;
+
+      /* Also add any persistent classes in
+       * the style context the widget path
+       */
+      classes = gtk_style_context_list_classes (widget->priv->context);
+
+      for (l = classes; l; l = l->next)
+        gtk_widget_path_iter_add_class (path, pos, l->data);
+
+      g_list_free (classes);
+    }
+
+  return pos;
+}
+
 /**
  * gtk_widget_get_path:
  * @widget: a #GtkWidget
@@ -14253,7 +14299,6 @@ gtk_widget_get_path (GtkWidget *widget)
   if (!widget->priv->path)
     {
       GtkWidget *parent;
-      guint pos;
 
       parent = widget->priv->parent;
 
@@ -14269,28 +14314,11 @@ gtk_widget_get_path (GtkWidget *widget)
           widget->priv->path = gtk_widget_path_new ();
         }
 
-      pos = gtk_widget_path_append_type (widget->priv->path, G_OBJECT_TYPE (widget));
-
-      if (widget->priv->name)
-        gtk_widget_path_iter_set_name (widget->priv->path, pos, widget->priv->name);
+      gtk_widget_path_append_for_widget (widget->priv->path, widget);
 
       if (widget->priv->context)
-        {
-          GList *classes, *l;
-
-          /* Also add any persistent classes in
-           * the style context the widget path
-           */
-          classes = gtk_style_context_list_classes (widget->priv->context);
-
-          for (l = classes; l; l = l->next)
-            gtk_widget_path_iter_add_class (widget->priv->path, pos, l->data);
-
-          gtk_style_context_set_path (widget->priv->context,
-                                      widget->priv->path);
-
-          g_list_free (classes);
-        }
+        gtk_style_context_set_path (widget->priv->context,
+                                    widget->priv->path);
     }
 
   return widget->priv->path;
index c33b059e4bb048d0054204b984c289e4a992dc93..e44824fc523ddd2766de6544979e8d03216a0062 100644 (file)
@@ -31,6 +31,10 @@ G_BEGIN_DECLS
 
 typedef struct _GtkWidgetPath GtkWidgetPath;
 
+/* We make this forward declaration here, since gtkwidget.h includes us.
+ */
+typedef struct _GtkWidget      GtkWidget;
+
 #define GTK_TYPE_WIDGET_PATH (gtk_widget_path_get_type ())
 
 GType           gtk_widget_path_get_type            (void) G_GNUC_CONST;
@@ -46,6 +50,9 @@ gint            gtk_widget_path_append_type         (GtkWidgetPath       *path,
                                                      GType                type);
 void            gtk_widget_path_prepend_type        (GtkWidgetPath       *path,
                                                      GType                type);
+/* gtk_widget_path_append_for_widget() is declared in gtkwidget.c */
+gint            gtk_widget_path_append_for_widget   (GtkWidgetPath       *path,
+                                                     GtkWidget           *widget);
 
 GType               gtk_widget_path_iter_get_object_type (const GtkWidgetPath *path,
                                                           gint                 pos);