[gtk+/client-side-windows: 103/284] Fix performance issue with find_native_sibling_above



commit e718893611646528cf0eb730c453e4e73b1a0a47
Author: Alexander Larsson <alexl redhat com>
Date:   Tue Jan 20 23:58:22 2009 +0100

    Fix performance issue with find_native_sibling_above
    
    It keep recursing a lot, unnecessary
---
 gdk/gdkwindow.c |   23 +++++++++++++++++++----
 1 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index 8da989c..fedf32a 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -693,8 +693,8 @@ _gdk_window_update_size (GdkWindow *window)
  * If child is NULL, find lowest native window in parent.
  */
 static GdkWindowObject *
-find_native_sibling_above (GdkWindowObject *parent,
-			   GdkWindowObject *child)
+find_native_sibling_above_helper (GdkWindowObject *parent,
+				  GdkWindowObject *child)
 {
   GdkWindowObject *w;
   GList *l;
@@ -714,12 +714,27 @@ find_native_sibling_above (GdkWindowObject *parent,
 	
       if (gdk_window_has_impl (w))
 	return w;
-      
-      w = find_native_sibling_above (w, NULL);
+
+      g_assert (parent != w);
+      w = find_native_sibling_above_helper (w, NULL);
       if (w)
 	return w;
     }
 
+  return NULL;
+}
+
+
+static GdkWindowObject *
+find_native_sibling_above (GdkWindowObject *parent,
+			   GdkWindowObject *child)
+{
+  GdkWindowObject *w;
+
+  w = find_native_sibling_above_helper (parent, child);
+  if (w)
+    return w;
+
   if (gdk_window_has_impl (parent))
     return NULL;
   else



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]