Add gdk_window_get_children_with_user_data

This function returns all the children that has a specific user_data set.
This is used a lot in the new GtkWidget drawing code and doing
it this way is faster than getting every child and calling get_user_data
on each (which was a non-neglible part of the profiles). Additionally it
also allows use to use some kind of hashtable to make this operation even
faster if needed in the future.
This commit is contained in:
Alexander Larsson
2013-05-03 10:39:24 +02:00
parent cad751c762
commit adffcf8af6
2 changed files with 45 additions and 0 deletions

View File

@@ -2399,6 +2399,47 @@ gdk_window_peek_children (GdkWindow *window)
return window->children;
}
/**
* gdk_window_get_children_with_user_data:
* @window: a #GdkWindow
*
* Gets the list of children of @window known to GDK with a particular
* user_data set on it.
*
* The returned list must be freed, but the elements in the
* list need not be.
*
* The list is returned in (relative) stacking order, i.e. the
* lowest window is first.
*
* Return value: (transfer container) (element-type GdkWindow):
* list of child windows inside @window
**/
GList *
gdk_window_get_children_with_user_data (GdkWindow *window, gpointer user_data)
{
GdkWindow *child;
GList *res, *l;
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
if (GDK_WINDOW_DESTROYED (window))
return NULL;
res = NULL;
for (l = window->children; l != NULL; l = l->next)
{
child = l->data;
if (child->user_data == user_data)
res = g_list_prepend (res, child);
}
return res;
}
/**
* gdk_window_add_filter: (skip)
* @window: (allow-none): a #GdkWindow

View File

@@ -856,6 +856,10 @@ GDK_AVAILABLE_IN_ALL
GList * gdk_window_get_children (GdkWindow *window);
GDK_AVAILABLE_IN_ALL
GList * gdk_window_peek_children (GdkWindow *window);
GDK_AVAILABLE_IN_3_10
GList * gdk_window_get_children_with_user_data (GdkWindow *window,
gpointer user_data);
GDK_AVAILABLE_IN_ALL
GdkEventMask gdk_window_get_events (GdkWindow *window);
GDK_AVAILABLE_IN_ALL