mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-06 00:30:08 +00:00
widgetpath: Make structure refcounted
I want to use widget paths in a way that make a lot more sense with a refcounted structure. See the following patches.
This commit is contained in:
parent
91602cca6e
commit
03eb4c38c9
@ -5417,6 +5417,8 @@ GTK_CHECK_VERSION
|
|||||||
GtkWidgetPath
|
GtkWidgetPath
|
||||||
gtk_widget_path_append_type
|
gtk_widget_path_append_type
|
||||||
gtk_widget_path_copy
|
gtk_widget_path_copy
|
||||||
|
gtk_widget_path_ref
|
||||||
|
gtk_widget_path_unref
|
||||||
gtk_widget_path_free
|
gtk_widget_path_free
|
||||||
gtk_widget_path_get_object_type
|
gtk_widget_path_get_object_type
|
||||||
gtk_widget_path_has_parent
|
gtk_widget_path_has_parent
|
||||||
|
@ -3578,6 +3578,8 @@ gtk_widget_override_symbolic_color
|
|||||||
gtk_widget_path
|
gtk_widget_path
|
||||||
gtk_widget_path_append_type
|
gtk_widget_path_append_type
|
||||||
gtk_widget_path_copy
|
gtk_widget_path_copy
|
||||||
|
gtk_widget_path_ref
|
||||||
|
gtk_widget_path_unref
|
||||||
gtk_widget_path_free
|
gtk_widget_path_free
|
||||||
gtk_widget_path_get_type
|
gtk_widget_path_get_type
|
||||||
gtk_widget_path_get_object_type
|
gtk_widget_path_get_object_type
|
||||||
|
@ -97,6 +97,8 @@ struct GtkPathElement
|
|||||||
|
|
||||||
struct _GtkWidgetPath
|
struct _GtkWidgetPath
|
||||||
{
|
{
|
||||||
|
volatile guint ref_count;
|
||||||
|
|
||||||
GArray *elems; /* First element contains the described widget */
|
GArray *elems; /* First element contains the described widget */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -116,6 +118,7 @@ gtk_widget_path_new (void)
|
|||||||
|
|
||||||
path = g_slice_new0 (GtkWidgetPath);
|
path = g_slice_new0 (GtkWidgetPath);
|
||||||
path->elems = g_array_new (FALSE, TRUE, sizeof (GtkPathElement));
|
path->elems = g_array_new (FALSE, TRUE, sizeof (GtkPathElement));
|
||||||
|
path->ref_count = 1;
|
||||||
|
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
@ -174,20 +177,44 @@ gtk_widget_path_copy (const GtkWidgetPath *path)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gtk_widget_path_free:
|
* gtk_widget_path_ref:
|
||||||
* @path: a #GtkWidgetPath
|
* @path: a #GtkWidgetPath
|
||||||
*
|
*
|
||||||
* Frees a #GtkWidgetPath.
|
* Increments the reference count on @path.
|
||||||
*
|
*
|
||||||
* Since: 3.0
|
* Returns: @path itself.
|
||||||
|
*
|
||||||
|
* Since: 3.2
|
||||||
|
**/
|
||||||
|
GtkWidgetPath *
|
||||||
|
gtk_widget_path_ref (GtkWidgetPath *path)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (path != NULL, path);
|
||||||
|
|
||||||
|
g_atomic_int_add (&path->ref_count, 1);
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_widget_path_unref:
|
||||||
|
* @path: a #GtkWidgetPath
|
||||||
|
*
|
||||||
|
* Decrements the reference count on @path, freeing the structure
|
||||||
|
* if the reference count reaches 0.
|
||||||
|
*
|
||||||
|
* Since: 3.2
|
||||||
**/
|
**/
|
||||||
void
|
void
|
||||||
gtk_widget_path_free (GtkWidgetPath *path)
|
gtk_widget_path_unref (GtkWidgetPath *path)
|
||||||
{
|
{
|
||||||
guint i;
|
guint i;
|
||||||
|
|
||||||
g_return_if_fail (path != NULL);
|
g_return_if_fail (path != NULL);
|
||||||
|
|
||||||
|
if (!g_atomic_int_dec_and_test (&path->ref_count))
|
||||||
|
return;
|
||||||
|
|
||||||
for (i = 0; i < path->elems->len; i++)
|
for (i = 0; i < path->elems->len; i++)
|
||||||
{
|
{
|
||||||
GtkPathElement *elem;
|
GtkPathElement *elem;
|
||||||
@ -205,6 +232,23 @@ gtk_widget_path_free (GtkWidgetPath *path)
|
|||||||
g_slice_free (GtkWidgetPath, path);
|
g_slice_free (GtkWidgetPath, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_widget_path_free:
|
||||||
|
* @path: a #GtkWidgetPath
|
||||||
|
*
|
||||||
|
* Decrements the reference count on @path, freeing the structure
|
||||||
|
* if the reference count reaches 0.
|
||||||
|
*
|
||||||
|
* Since: 3.0
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
gtk_widget_path_free (GtkWidgetPath *path)
|
||||||
|
{
|
||||||
|
g_return_if_fail (path != NULL);
|
||||||
|
|
||||||
|
gtk_widget_path_unref (path);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gtk_widget_path_length:
|
* gtk_widget_path_length:
|
||||||
* @path: a #GtkWidgetPath
|
* @path: a #GtkWidgetPath
|
||||||
|
@ -41,6 +41,8 @@ GType gtk_widget_path_get_type (void) G_GNUC_CONST;
|
|||||||
GtkWidgetPath * gtk_widget_path_new (void);
|
GtkWidgetPath * gtk_widget_path_new (void);
|
||||||
|
|
||||||
GtkWidgetPath * gtk_widget_path_copy (const GtkWidgetPath *path);
|
GtkWidgetPath * gtk_widget_path_copy (const GtkWidgetPath *path);
|
||||||
|
GtkWidgetPath * gtk_widget_path_ref (GtkWidgetPath *path);
|
||||||
|
void gtk_widget_path_unref (GtkWidgetPath *path);
|
||||||
void gtk_widget_path_free (GtkWidgetPath *path);
|
void gtk_widget_path_free (GtkWidgetPath *path);
|
||||||
|
|
||||||
char * gtk_widget_path_to_string (const GtkWidgetPath *path);
|
char * gtk_widget_path_to_string (const GtkWidgetPath *path);
|
||||||
|
Loading…
Reference in New Issue
Block a user