Fix window picking order
authorKristian Høgsberg <krh@bitplanet.net>
Mon, 12 Jul 2010 21:06:06 +0000 (17:06 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Mon, 12 Jul 2010 21:06:06 +0000 (17:06 -0400)
compositor.c
wayland-util.h

index f3017ab..824bf0d 100644 (file)
@@ -335,7 +335,7 @@ wlsc_surface_raise(struct wlsc_surface *surface)
        struct wlsc_compositor *compositor = surface->compositor;
 
        wl_list_remove(&surface->link);
-       wl_list_insert(compositor->surface_list.prev, &surface->link);
+       wl_list_insert(&compositor->surface_list, &surface->link);
 }
 
 static void
@@ -344,7 +344,7 @@ wlsc_surface_lower(struct wlsc_surface *surface)
        struct wlsc_compositor *compositor = surface->compositor;
 
        wl_list_remove(&surface->link);
-       wl_list_insert(&compositor->surface_list, &surface->link);
+       wl_list_insert(compositor->surface_list.prev, &surface->link);
 }
 
 void
@@ -372,7 +372,7 @@ wlsc_output_repaint(struct wlsc_output *output)
        else
                glClear(GL_COLOR_BUFFER_BIT);
 
-       wl_list_for_each(es, &ec->surface_list, link)
+       wl_list_for_each_reverse(es, &ec->surface_list, link)
                wlsc_surface_draw(es, output);
 
        if (ec->focus)
index bc9d89b..6ccc56a 100644 (file)
@@ -98,6 +98,11 @@ int wl_list_empty(struct wl_list *list);
             &pos->member != (head);                                    \
             pos = __container_of(pos->member.next, pos, member))
 
+#define wl_list_for_each_reverse(pos, head, member)                    \
+       for (pos = __container_of((head)->prev, pos, member);           \
+            &pos->member != (head);                                    \
+            pos = __container_of(pos->member.prev, pos, member))
+
 struct wl_array {
        uint32_t size;
        uint32_t alloc;