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

Commit 8d6521d17956052473d173e77655a717b19a75b2
Parent: 1cec4446c1cd7f707e42bee1368416717f062218
Author: mcol <mcol@posteo.net>
Date: 2020-11-22 19:02:41 +0000
Committer: mcol <mcol@posteo.net>
Committed: 2020-11-22 19:02:41 +0000

don't change focus when changing desks

src/types.h Modified

@@ -38,6 +38,7 @@
     struct wl_list desks;
     int desk_count;
     struct desk *current_desk;
+    bool can_steal_focus;
 
     struct wlr_cursor *cursor;
     struct wlr_xcursor_manager *cursor_manager;

src/shell.c Modified

@@ -44,7 +44,8 @@
 
 void on_map(struct wl_listener *listener, void *data) {
     struct view *view = wl_container_of(listener, view, map_listener);
-    focus_view(view, view->surface->surface);
+    if (view->server->can_steal_focus)
+	focus_view(view, view->surface->surface);
 }
 
 void on_unmap(struct wl_listener *listener, void *data) {

src/deskwm.c Modified

@@ -44,6 +44,7 @@
     wlr_compositor_create(server.display, server.renderer);
     wlr_data_device_manager_create(server.display);
     wl_list_init(&server.desks);
+    server.can_steal_focus = false;
 
     // read config
     load_config(&server, config);

src/desk.c Modified

@@ -23,7 +23,9 @@
 	unmap_view(view);
     }
     server->current_desk = desk;
+    server->can_steal_focus = false;
     wl_list_for_each(view, &server->current_desk->views, link) {
 	map_view(view);
     }
+    server->can_steal_focus = true;
 }