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

Commit ef78040a4e031d7806aa7e791e8750160b6f1e5f
Parent: 2bfdee0aec288528ae72c44308bf490ee353f7a3
Author: mcol <mcol@posteo.net>
Date: 2020-11-08 17:47:19 +0000
Committer: mcol <mcol@posteo.net>
Committed: 2020-11-08 17:47:19 +0000

move views wl_lists for desks, thereby implementing workspaces

src/types.h Modified

@@ -28,7 +28,6 @@
 
     struct wlr_xdg_shell *shell;
     struct wl_listener new_xdg_surface_listener;
-    struct wl_list views;
     struct wl_list desks;
     struct desk *current_desk;
 
@@ -74,6 +73,7 @@
 struct desk {
     struct wl_list link;
     struct server *server;
+    struct wl_list views;
     float background[4];
     int x, y;
     int index;

src/shell.c Modified

@@ -34,7 +34,7 @@
     struct wlr_keyboard *keyboard = wlr_seat_get_keyboard(seat);
     /* Move the view to the front */
     wl_list_remove(&view->link);
-    wl_list_insert(&server->views, &view->link);
+    wl_list_insert(&server->current_desk->views, &view->link);
     /* Activate the new surface */
     wlr_xdg_toplevel_set_activated(view->surface, true);
     wlr_seat_keyboard_notify_enter(
@@ -124,7 +124,7 @@
     view->request_resize_listener.notify = on_request_resize;
     wl_signal_add(&toplevel->events.request_resize, &view->request_resize_listener);
 
-    wl_list_insert(&server->views, &view->link);
+    wl_list_insert(&server->current_desk->views, &view->link);
 }
 
 
@@ -135,6 +135,7 @@
     struct desk *desk = calloc(1, sizeof(struct desk));
     wl_list_insert(server->desks.prev, &desk->link);
     desk->server = server;
+    wl_list_init(&desk->views);
     assign_colour("#5D479D", desk->background);
     desk->index = num_desks;
     num_desks++;
@@ -170,7 +171,6 @@
 
 
 void set_up_shell(struct server *server) {
-    wl_list_init(&server->views);
     server->shell = wlr_xdg_shell_create(server->display);
     server->new_xdg_surface_listener.notify = on_new_xdg_surface;
     wl_signal_add(&server->shell->events.new_surface, &server->new_xdg_surface_listener);

src/output.c Modified

@@ -63,7 +63,7 @@
     wlr_renderer_clear(renderer, output->server->current_desk->background);
 
     struct view *view;
-    wl_list_for_each_reverse(view, &output->server->views, link) {
+    wl_list_for_each_reverse(view, &output->server->current_desk->views, link) {
 	struct render_data rdata = {
 	    .output = output->wlr_output,
 	    .view = view,

src/input.c Modified

@@ -87,7 +87,7 @@
     double *sx, double *sy
 ) {
     struct view *view;
-    wl_list_for_each(view, &server->views, link) {
+    wl_list_for_each(view, &server->current_desk->views, link) {
 	if (view_at(view, lx, ly, surface, sx, sy)) {
 	    return view;
 	}