From: Kristian Høgsberg Date: Mon, 12 Jul 2010 21:06:06 +0000 (-0400) Subject: Fix window picking order X-Git-Tag: 0.85.0~915 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=747638b46be785d2e00d00cae1030518193858a7;p=platform%2Fupstream%2Fweston.git Fix window picking order --- diff --git a/compositor.c b/compositor.c index f3017ab..824bf0d 100644 --- a/compositor.c +++ b/compositor.c @@ -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) diff --git a/wayland-util.h b/wayland-util.h index bc9d89b..6ccc56a 100644 --- a/wayland-util.h +++ b/wayland-util.h @@ -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;