From 049b18a49643708329b03e3bddbf959a81588def Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Wed, 14 Jan 2026 03:42:57 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=20send=5Fclient=5Fto=5Fnext?= =?UTF-8?q?=5Fmonitor=20=E5=87=BD=E6=95=B0=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/action.c | 16 +++------------- src/client.c | 1 + src/wm.c | 6 ++++++ src/wm.h | 1 + 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/action.c b/src/action.c index 3c34e8c..fb1d9b0 100644 --- a/src/action.c +++ b/src/action.c @@ -36,20 +36,10 @@ void send_client_to_tag(const user_action_arg_t *arg) { void send_client_to_next_monitor(const user_action_arg_t *arg) { if (!wm.client_focused) return; - monitor_t *current_monitor = wm.client_focused->monitor; - monitor_t *next_monitor = current_monitor->next; - if (next_monitor == nullptr) { - next_monitor = wm.monitor_list; - } else { - for (monitor_t *m = wm.monitor_list; m && m->next != current_monitor; - m = m->next) { - next_monitor = m; - } - } + monitor_t *next_monitor = wm_get_next_monitor(wm.client_focused->monitor); + if (wm.client_focused->monitor == next_monitor) return; - if (current_monitor != next_monitor) { - client_send_to_monitor(wm.client_focused, next_monitor); - } + client_send_to_monitor(wm.client_focused, next_monitor); } void spawn(const user_action_arg_t *arg) { diff --git a/src/client.c b/src/client.c index 1959264..b1ad0f3 100644 --- a/src/client.c +++ b/src/client.c @@ -251,6 +251,7 @@ void client_send_to_monitor(client_t *client, monitor_t *monitor) { client->tags = monitor->selected_tag->mask; client_add_to_tag(client, monitor->selected_tag); + wm.current_monitor = monitor; monitor_arrange(m); monitor_arrange(monitor); monitor_draw_bar(m); diff --git a/src/wm.c b/src/wm.c index cd1d572..1a78b0d 100644 --- a/src/wm.c +++ b/src/wm.c @@ -419,6 +419,12 @@ monitor_t *wm_get_monitor_by_point(point_t point) { return wm.monitor_list; } +monitor_t *wm_get_next_monitor(monitor_t *monitor) { + monitor_t *next_monitor = monitor->next; + if (next_monitor == nullptr) next_monitor = wm.monitor_list; + return next_monitor; +} + static void debug_show_monitor_list(void) { logger("\n========================== monitors ==========================\n"); for (monitor_t *m = wm.monitor_list; m; m = m->next) { diff --git a/src/wm.h b/src/wm.h index dfe8d76..24c3155 100644 --- a/src/wm.h +++ b/src/wm.h @@ -54,3 +54,4 @@ void wm_restart(void); void wm_quit(void); void wm_restack_clients(void); monitor_t *wm_get_monitor_by_point(point_t point); +monitor_t *wm_get_next_monitor(monitor_t *monitor);