添加切换当前屏幕快捷键

This commit is contained in:
2025-08-27 03:44:13 +08:00
parent a0c8baa863
commit 8d9becbf0f
3 changed files with 29 additions and 0 deletions

View File

@@ -67,6 +67,7 @@ static void set_client_fullscreen(client_t *client, bool fullscreen);
static void apply_monitor_layout(monitor_t *monitor);
static client_t *get_client_of_window(xcb_window_t window);
static monitor_t *get_monitor_of_window(xcb_window_t window);
static monitor_t *get_monitor_by_direction(bool forward);
static gboolean handle_xcb_event(GIOChannel *channel, GIOCondition condition,
gpointer userdata);
static void cleanup(void);
@@ -147,6 +148,19 @@ void focus_stack(const user_action_arg_t *arg) {
}
}
void focus_monitor(const user_action_arg_t *arg) {
if (!monitors->next) return;
bool forward = arg->b;
monitor_t *monitor = get_monitor_by_direction(forward);
if (monitor == current_monitor) return;
unfocus(current_monitor->selected_client, false);
current_monitor = monitor;
focus(NULL);
/* TODO: 调整鼠标光标 */
}
/* 调试函数,开发完成后删除 */
static void print_monitor_list_info(monitor_t *monitor_list) {
logger("========================= monitor info =========================\n");
@@ -1056,6 +1070,18 @@ monitor_t *get_monitor_of_window(xcb_window_t window) {
return current_monitor;
}
monitor_t *get_monitor_by_direction(bool forward) {
monitor_t *m = NULL;
if (forward) {
if (!(m = current_monitor->next)) m = monitors;
} else if (current_monitor == monitors) {
for (m = monitors; m->next; m = m->next);
} else {
for (m = monitors; m->next != current_monitor; m = m->next);
}
return m;
}
gboolean handle_xcb_event(GIOChannel *channel, GIOCondition condition,
gpointer userdata) {
if (condition & (G_IO_HUP | G_IO_ERR)) {