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

Commit beed13cde8505bccf868f7a6c0ff63305a5541db
Parent: a70ba044975c98144424d02b54c2aacfd07a05ca
Author: mcol <mcol@posteo.net>
Date: 2021-01-30 19:38:37 +0000
Committer: mcol <mcol@posteo.net>
Committed: 2021-01-30 19:38:37 +0000

if focussed layer shell is unmapped, focus top view

src/types.h Modified

@@ -62,6 +62,7 @@
 
     struct wlr_layer_shell_v1 *layer_shell;
     struct wl_listener layer_shell_surface_listener;
+    struct layer_view *focussed_layer_view;
 
     struct wlr_cursor *cursor;
     struct wlr_xcursor_manager *cursor_manager;

src/layer_shell.c Modified

@@ -71,6 +71,7 @@
 		    wimp.seat, lview->surface->surface, keyboard->keycodes,
 		    keyboard->num_keycodes, &keyboard->modifiers
 		);
+		wimp.focussed_layer_view = lview;
 		return;
 	    }
 	}
@@ -95,7 +96,16 @@
     struct layer_view *lview = wl_container_of(listener, lview, unmap_listener);
     lview->surface->mapped = false;
     layer(lview->output);
-    wlr_surface_send_enter(lview->surface->surface, lview->surface->output);
+
+    if (wimp.focussed_layer_view == lview) {
+	struct wlr_keyboard *keyboard = wlr_seat_get_keyboard(wimp.seat);
+	struct view *view = wl_container_of(wimp.current_desk->views.next, view, link);
+	wlr_seat_keyboard_notify_enter(
+	    wimp.seat, view->surface->surface, keyboard->keycodes,
+	    keyboard->num_keycodes, &keyboard->modifiers
+	);
+	wimp.focussed_layer_view = NULL;
+    }
 }
 
 
@@ -103,6 +113,7 @@
     struct layer_view *lview = wl_container_of(listener, lview, map_listener);
     lview->surface->mapped = true;
     layer(lview->output);
+    wlr_surface_send_enter(lview->surface->surface, lview->surface->output);
 }