API: Add gtk_widget_path_append_for_widget()

Includes a bunch of header shuffling so we can use GtkWidget* in
gtkwidgetpath.h
This commit is contained in:
Benjamin Otte 2011-05-25 20:42:27 +02:00
parent 60081644ae
commit b0616c8225
3 changed files with 56 additions and 26 deletions

View 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.

View 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;

View 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);