From 3f8f39c01934493eaf98c3e24954c82e98dccf65 Mon Sep 17 00:00:00 2001 From: Kristian Høgsberg Date: Fri, 18 Sep 2009 17:05:13 -0400 Subject: Remove surfaces when destroyed, refocus pointer --- wayland-system-compositor.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/wayland-system-compositor.c b/wayland-system-compositor.c index 3c8491f..02cf84c 100644 --- a/wayland-system-compositor.c +++ b/wayland-system-compositor.c @@ -369,6 +369,10 @@ wlsc_surface_destroy(struct wlsc_surface *surface, { struct wlsc_listener *l, *next; + wl_list_remove(&surface->link); + glDeleteTextures(1, &surface->texture); + wl_client_remove_surface(surface->base.client, &surface->base); + l = container_of(compositor->surface_destroy_listener_list.next, struct wlsc_listener, link); while (&l->link != &compositor->surface_destroy_listener_list) { @@ -377,9 +381,6 @@ wlsc_surface_destroy(struct wlsc_surface *surface, l = next; } - wl_list_remove(&surface->link); - - glDeleteTextures(1, &surface->texture); free(surface); } @@ -1037,15 +1038,20 @@ handle_surface_destroy(struct wlsc_listener *listener, { struct wlsc_input_device *device = container_of(listener, struct wlsc_input_device, listener); + struct wlsc_surface *focus; + int32_t sx, sy; if (device->grab_surface == surface) { device->grab_surface = NULL; device->grab = 0; } if (device->keyboard_focus == surface) - device->keyboard_focus = NULL; - if (device->pointer_focus == surface) - device->pointer_focus = NULL; + wlsc_input_device_set_keyboard_focus(device, NULL); + if (device->pointer_focus == surface) { + focus = pick_surface(device, &sx, &sy); + wlsc_input_device_set_pointer_focus(device, focus); + fprintf(stderr, "lost pointer focus surface, reverting to %p\n", focus); + } } static struct wlsc_input_device * -- cgit