From e3816187becc04e9c2b07373fe0a67e7ed381f27 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Wed, 4 Jun 2025 13:28:36 +0100 Subject: fix master cursor not moving with master window when changing --- src/sxwm.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/sxwm.c b/src/sxwm.c index 7f546a5..d43a7eb 100644 --- a/src/sxwm.c +++ b/src/sxwm.c @@ -1008,7 +1008,10 @@ void move_master_next(void) if (!workspaces[current_ws] || !workspaces[current_ws]->next) { return; } + Client *first = workspaces[current_ws]; + Client *old_focused = focused; + workspaces[current_ws] = first->next; first->next = NULL; @@ -1019,6 +1022,12 @@ void move_master_next(void) tail->next = first; tile(); + if (user_config.warp_cursor && old_focused) { + warp_cursor(old_focused); + } + if (old_focused) { + send_wm_take_focus(old_focused->win); + } update_borders(); } @@ -1027,15 +1036,29 @@ void move_master_prev(void) if (!workspaces[current_ws] || !workspaces[current_ws]->next) { return; } + Client *prev = NULL, *cur = workspaces[current_ws]; + Client *old_focused = focused; + while (cur->next) { prev = cur; cur = cur->next; } - prev->next = NULL; + + if (prev) { + prev->next = NULL; + } + cur->next = workspaces[current_ws]; workspaces[current_ws] = cur; + tile(); + if (user_config.warp_cursor && old_focused) { + warp_cursor(old_focused); + } + if (old_focused) { + send_wm_take_focus(old_focused->win); + } update_borders(); } @@ -1876,4 +1899,4 @@ int main(int ac, char **av) printf("sxwm: starting...\n"); run(); return 0; -} \ No newline at end of file +} -- cgit v1.2.3