gimp but for windows: a wayland compositor
git clone https://github.com/m-col/wimp
Files | Refs | Readme

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);