Commit 377d16183feafb4dddcc1392519dde7a84fdbab2 Parent: 4e3d98c5b487213aae97f4e701a3f391018cfe9e Author: mcol <mcol@posteo.net> Date: 2020-11-07 23:43:52 +0000 Committer: mcol <mcol@posteo.net> Committed: 2020-11-07 23:43:52 +0000 store current desk as server member to avoid per-frame calculation
src/types.h Modified
@@ -30,6 +30,7 @@ struct wl_listener new_xdg_surface_listener; struct wl_list views; struct wl_list desks; + struct desk *current_desk; struct wlr_cursor *cursor; struct wlr_xcursor_manager *cursor_manager;
src/shell.c Modified
@@ -127,7 +127,7 @@ } -static int desk_index = 0; +static int num_desks = 0; void add_desk(struct server *server) { @@ -135,8 +135,8 @@ wl_list_insert(server->desks.prev, &desk->link); desk->server = server; assign_colour("#5D479D", desk->background); - desk->index = desk_index; - desk_index++; + desk->index = num_desks; + num_desks++; } @@ -147,16 +147,24 @@ void next_desk(struct server *server) { - struct wl_list *current = server->desks.next; - wl_list_remove(current); - wl_list_insert(server->desks.prev, current); + struct desk *desk; + if (server->current_desk->index + 1 == num_desks) { + desk = wl_container_of(server->desks.next, desk, link); + } else { + desk = wl_container_of(server->current_desk->link.next, desk, link); + } + server->current_desk = desk; } void prev_desk(struct server *server) { - struct wl_list *prev = server->desks.prev; - wl_list_remove(prev); - wl_list_insert(&server->desks, prev); + struct desk *desk; + if (server->current_desk->index == 0) { + desk = wl_container_of(server->desks.prev, desk, link); + } else { + desk = wl_container_of(server->current_desk->link.prev, desk, link); + } + server->current_desk = desk; }
src/output.c Modified
@@ -60,8 +60,7 @@ wlr_output_effective_resolution(output->wlr_output, &width, &height); wlr_renderer_begin(renderer, width, height); - struct desk *desk = wl_container_of(output->server->desks.next, desk, link); - wlr_renderer_clear(renderer, desk->background); + wlr_renderer_clear(renderer, output->server->current_desk->background); struct view *view; wl_list_for_each_reverse(view, &output->server->views, link) {
src/config.c Modified
@@ -35,6 +35,8 @@ static void set_defaults(struct server *server) { add_desk(server); + server->current_desk = + wl_container_of(server->desks.prev, server->current_desk, link); }