diff --git a/compositor.c b/compositor.c index f3017ab3..824bf0d0 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 bc9d89b6..6ccc56a1 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;