[gtk+/wip/simple-draw4] Add gdk_window_get_children_with_user_data
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/simple-draw4] Add gdk_window_get_children_with_user_data
- Date: Fri, 3 May 2013 08:46:18 +0000 (UTC)
commit 97ad2d7897f222598c3d36d4cf0e707a320a959d
Author: Alexander Larsson <alexl redhat com>
Date: Fri May 3 10:39:24 2013 +0200
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.
gdk/gdkwindow.c | 41 +++++++++++++++++++++++++++++++++++++++++
gdk/gdkwindow.h | 3 +++
2 files changed, 44 insertions(+), 0 deletions(-)
---
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index 39ccda0..7a9b0c3 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -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
diff --git a/gdk/gdkwindow.h b/gdk/gdkwindow.h
index 6ee09c4..2d4fa7a 100644
--- a/gdk/gdkwindow.h
+++ b/gdk/gdkwindow.h
@@ -767,6 +767,9 @@ GdkWindow * gdk_window_get_effective_toplevel (GdkWindow *window);
GList * gdk_window_get_children (GdkWindow *window);
GList * gdk_window_peek_children (GdkWindow *window);
+GList * gdk_window_get_children_with_user_data (GdkWindow *window,
+ gpointer user_data);
+
GdkEventMask gdk_window_get_events (GdkWindow *window);
void gdk_window_set_events (GdkWindow *window,
GdkEventMask event_mask);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]