summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAbhinav <abhinav.prsai@gmail.com>2025-06-04 13:28:36 +0100
committerAbhinav <abhinav.prsai@gmail.com>2025-06-04 13:28:36 +0100
commite3816187becc04e9c2b07373fe0a67e7ed381f27 (patch)
tree457ca33967ab8e7b9fdf13a072f79d2b61307fa1 /src
parentc4fab12e5cced595e63af5a7e7eac2cddeae8fbc (diff)
fix master cursor not moving with master window when changing
Diffstat (limited to 'src')
-rw-r--r--src/sxwm.c27
1 files changed, 25 insertions, 2 deletions
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
+}