Commit 97cc262356e06759da4c61b2364590182934320c Parent: 80b7e8d6cb64bc918e851ebd053d9a19dc340191 Author: mcol <mcol@posteo.net> Date: 2020-11-12 23:18:19 +0000 Committer: mcol <mcol@posteo.net> Committed: 2020-11-12 23:18:19 +0000 focus next window on unmap
src/types.h Modified
@@ -59,6 +59,7 @@ struct server *server; struct wlr_xdg_surface *surface; struct wl_listener map_listener; + struct wl_listener unmap_listener; struct wl_listener destroy_listener; struct wl_listener request_move_listener; struct wl_listener request_resize_listener;
src/shell.c Modified
@@ -61,6 +61,14 @@ focus_view(view, view->surface->surface); } +void on_unmap(struct wl_listener *listener, void *data) { + struct view *view = wl_container_of(listener, view, unmap_listener); + wl_list_remove(&view->link); + wl_list_insert(view->server->current_desk->views.prev, &view->link); + struct view *next_view = wl_container_of(view->server->current_desk->views.next, view, link); + focus_view(next_view, next_view->surface->surface); +} + void on_surface_destroy(struct wl_listener *listener, void *data) { struct view *view = wl_container_of(listener, view, destroy_listener); @@ -119,6 +127,8 @@ view->map_listener.notify = on_map; wl_signal_add(&surface->events.map, &view->map_listener); + view->unmap_listener.notify = on_unmap; + wl_signal_add(&surface->events.unmap, &view->unmap_listener); view->destroy_listener.notify = on_surface_destroy; wl_signal_add(&surface->events.destroy, &view->destroy_listener);