project: not use global var

This commit is contained in:
DreamMaoMao 2026-02-04 20:13:44 +08:00
parent 0b35b00f91
commit 21a492e961
17 changed files with 1885 additions and 1599 deletions

View file

@ -237,7 +237,7 @@ void buffer_set_effect(Client *c, BufferData data) {
data.should_scale = false;
}
if (c == grabc)
if (c == server.grabc)
data.should_scale = false;
if (c->isnoradius || c->isfullscreen ||
@ -315,7 +315,7 @@ void client_draw_shadow(Client *c) {
int32_t right_offset, bottom_offset, left_offset, top_offset;
if (c == grabc) {
if (c == server.grabc) {
right_offset = 0;
bottom_offset = 0;
left_offset = 0;
@ -382,7 +382,7 @@ void apply_border(Client *c) {
int32_t right_offset, bottom_offset, left_offset, top_offset;
if (c == grabc) {
if (c == server.grabc) {
right_offset = 0;
bottom_offset = 0;
left_offset = 0;
@ -741,12 +741,13 @@ void client_animation_next_tick(Client *c) {
c->animation.current = c->geom;
}
xytonode(cursor->x, cursor->y, NULL, &pointer_c, NULL, &sx, &sy);
xytonode(server.cursor->x, server.cursor->y, NULL, &pointer_c, NULL,
&sx, &sy);
surface =
pointer_c && pointer_c == c ? client_surface(pointer_c) : NULL;
if (surface && pointer_c == selmon->sel) {
wlr_seat_pointer_notify_enter(seat, surface, sx, sy);
if (surface && pointer_c == server.selmon->sel) {
wlr_seat_pointer_notify_enter(server.seat, surface, sx, sy);
}
// end flush in next frame, not the current frame
@ -777,7 +778,7 @@ void init_fadeout_client(Client *c) {
wlr_scene_node_set_enabled(&c->scene->node, true);
client_set_border_color(c, bordercolor);
fadeout_cient->scene =
wlr_scene_tree_snapshot(&c->scene->node, layers[LyrFadeOut]);
wlr_scene_tree_snapshot(&c->scene->node, server.layers[LyrFadeOut]);
wlr_scene_node_set_enabled(&c->scene->node, false);
if (!fadeout_cient->scene) {
@ -836,7 +837,7 @@ void init_fadeout_client(Client *c) {
fadeout_cient->animation.time_started = get_now_in_ms();
wlr_scene_node_set_enabled(&fadeout_cient->scene->node, true);
wl_list_insert(&fadeout_clients, &fadeout_cient->fadeout_link);
wl_list_insert(&server.fadeout_clients, &fadeout_cient->fadeout_link);
// 请求刷新屏幕
request_fresh_all_monitors();
@ -871,7 +872,7 @@ void client_set_pending_state(Client *c) {
c->animation.should_animate = false;
} else if (animations && c->animation.tagining) {
c->animation.should_animate = true;
} else if (!animations || c == grabc ||
} else if (!animations || c == server.grabc ||
(!c->is_pending_open_animation &&
wlr_box_equal(&c->current, &c->pending))) {
c->animation.should_animate = false;
@ -892,7 +893,7 @@ void client_set_pending_state(Client *c) {
c->istagswitching = 0;
}
if (start_drag_window) {
if (server.start_drag_window) {
c->animation.should_animate = false;
c->animation.duration = 0;
}
@ -925,9 +926,10 @@ void resize(Client *c, struct wlr_box geo, int32_t interact) {
c->dirty = true;
// float_geom = c->geom;
bbox = (interact || c->isfloating || c->isfullscreen) ? &sgeom : &c->mon->w;
bbox = (interact || c->isfloating || c->isfullscreen) ? &server.sgeom
: &c->mon->w;
if (is_scroller_layout(c->mon) && (!c->isfloating || c == grabc)) {
if (is_scroller_layout(c->mon) && (!c->isfloating || c == server.grabc)) {
c->geom = geo;
c->geom.width = MAX(1 + 2 * (int32_t)c->bw, c->geom.width);
c->geom.height = MAX(1 + 2 * (int32_t)c->bw, c->geom.height);
@ -990,7 +992,7 @@ void resize(Client *c, struct wlr_box geo, int32_t interact) {
c->configure_serial = client_set_size(c, c->geom.width - 2 * c->bw,
c->geom.height - 2 * c->bw);
if (c == grabc) {
if (c == server.grabc) {
c->animation.running = false;
c->need_output_flush = false;
@ -1109,7 +1111,7 @@ bool client_apply_focus_opacity(Client *c) {
float percent =
animation_fade_in && !c->nofadein ? opacity_eased_progress : 1.0;
float opacity =
c == selmon->sel ? c->focused_opacity : c->unfocused_opacity;
c == server.selmon->sel ? c->focused_opacity : c->unfocused_opacity;
float target_opacity =
percent * (1.0 - fadein_begin_opacity) + fadein_begin_opacity;
@ -1157,7 +1159,7 @@ bool client_apply_focus_opacity(Client *c) {
} else {
return true;
}
} else if (c == selmon->sel) {
} else if (c == server.selmon->sel) {
c->opacity_animation.running = false;
c->opacity_animation.current_opacity = c->focused_opacity;
memcpy(c->opacity_animation.current_border_color, border_color,

View file

@ -29,44 +29,47 @@ struct dvec2 calculate_animation_curve_at(double t, int32_t type) {
}
void init_baked_points(void) {
baked_points_move = calloc(BAKED_POINTS_COUNT, sizeof(*baked_points_move));
baked_points_open = calloc(BAKED_POINTS_COUNT, sizeof(*baked_points_open));
baked_points_tag = calloc(BAKED_POINTS_COUNT, sizeof(*baked_points_tag));
baked_points_close =
calloc(BAKED_POINTS_COUNT, sizeof(*baked_points_close));
baked_points_focus =
calloc(BAKED_POINTS_COUNT, sizeof(*baked_points_focus));
baked_points_opafadein =
calloc(BAKED_POINTS_COUNT, sizeof(*baked_points_opafadein));
baked_points_opafadeout =
calloc(BAKED_POINTS_COUNT, sizeof(*baked_points_opafadeout));
server.baked_points_move =
calloc(BAKED_POINTS_COUNT, sizeof(*server.baked_points_move));
server.baked_points_open =
calloc(BAKED_POINTS_COUNT, sizeof(*server.baked_points_open));
server.baked_points_tag =
calloc(BAKED_POINTS_COUNT, sizeof(*server.baked_points_tag));
server.baked_points_close =
calloc(BAKED_POINTS_COUNT, sizeof(*server.baked_points_close));
server.baked_points_focus =
calloc(BAKED_POINTS_COUNT, sizeof(*server.baked_points_focus));
server.baked_points_opafadein =
calloc(BAKED_POINTS_COUNT, sizeof(*server.baked_points_opafadein));
server.baked_points_opafadeout =
calloc(BAKED_POINTS_COUNT, sizeof(*server.baked_points_opafadeout));
for (int32_t i = 0; i < BAKED_POINTS_COUNT; i++) {
baked_points_move[i] = calculate_animation_curve_at(
server.baked_points_move[i] = calculate_animation_curve_at(
(double)i / (BAKED_POINTS_COUNT - 1), MOVE);
}
for (int32_t i = 0; i < BAKED_POINTS_COUNT; i++) {
baked_points_open[i] = calculate_animation_curve_at(
server.baked_points_open[i] = calculate_animation_curve_at(
(double)i / (BAKED_POINTS_COUNT - 1), OPEN);
}
for (int32_t i = 0; i < BAKED_POINTS_COUNT; i++) {
baked_points_tag[i] = calculate_animation_curve_at(
server.baked_points_tag[i] = calculate_animation_curve_at(
(double)i / (BAKED_POINTS_COUNT - 1), TAG);
}
for (int32_t i = 0; i < BAKED_POINTS_COUNT; i++) {
baked_points_close[i] = calculate_animation_curve_at(
server.baked_points_close[i] = calculate_animation_curve_at(
(double)i / (BAKED_POINTS_COUNT - 1), CLOSE);
}
for (int32_t i = 0; i < BAKED_POINTS_COUNT; i++) {
baked_points_focus[i] = calculate_animation_curve_at(
server.baked_points_focus[i] = calculate_animation_curve_at(
(double)i / (BAKED_POINTS_COUNT - 1), FOCUS);
}
for (int32_t i = 0; i < BAKED_POINTS_COUNT; i++) {
baked_points_opafadein[i] = calculate_animation_curve_at(
server.baked_points_opafadein[i] = calculate_animation_curve_at(
(double)i / (BAKED_POINTS_COUNT - 1), OPAFADEIN);
}
for (int32_t i = 0; i < BAKED_POINTS_COUNT; i++) {
baked_points_opafadeout[i] = calculate_animation_curve_at(
server.baked_points_opafadeout[i] = calculate_animation_curve_at(
(double)i / (BAKED_POINTS_COUNT - 1), OPAFADEOUT);
}
}
@ -78,21 +81,21 @@ double find_animation_curve_at(double t, int32_t type) {
int32_t middle = (up + down) / 2;
struct dvec2 *baked_points;
if (type == MOVE) {
baked_points = baked_points_move;
baked_points = server.baked_points_move;
} else if (type == OPEN) {
baked_points = baked_points_open;
baked_points = server.baked_points_open;
} else if (type == TAG) {
baked_points = baked_points_tag;
baked_points = server.baked_points_tag;
} else if (type == CLOSE) {
baked_points = baked_points_close;
baked_points = server.baked_points_close;
} else if (type == FOCUS) {
baked_points = baked_points_focus;
baked_points = server.baked_points_focus;
} else if (type == OPAFADEIN) {
baked_points = baked_points_opafadein;
baked_points = server.baked_points_opafadein;
} else if (type == OPAFADEOUT) {
baked_points = baked_points_opafadeout;
baked_points = server.baked_points_opafadeout;
} else {
baked_points = baked_points_move;
baked_points = server.baked_points_move;
}
while (up - down != 1) {
@ -238,7 +241,8 @@ struct wlr_scene_tree *wlr_scene_tree_snapshot(struct wlr_scene_node *node,
}
// Disable and enable the snapshot tree like so to atomically update
// the scene-graph. This will prevent over-damaging or other weirdness.
// the server.scene -graph. This will prevent over-damaging or other
// weirdness.
wlr_scene_node_set_enabled(&snapshot->node, false);
if (!scene_node_snapshot(node, 0, 0, snapshot)) {
@ -253,7 +257,7 @@ struct wlr_scene_tree *wlr_scene_tree_snapshot(struct wlr_scene_node *node,
void request_fresh_all_monitors(void) {
Monitor *m = NULL;
wl_list_for_each(m, &mons, link) {
wl_list_for_each(m, &server.mons, link) {
if (!m->wlr_output->enabled) {
continue;
}

View file

@ -395,7 +395,7 @@ void init_fadeout_layers(LayerSurface *l) {
wlr_scene_node_set_enabled(&l->scene->node, true);
fadeout_layer->scene =
wlr_scene_tree_snapshot(&l->scene->node, layers[LyrFadeOut]);
wlr_scene_tree_snapshot(&l->scene->node, server.layers[LyrFadeOut]);
wlr_scene_node_set_enabled(&l->scene->node, false);
if (!fadeout_layer->scene) {
@ -463,7 +463,7 @@ void init_fadeout_layers(LayerSurface *l) {
// 将节点插入到关闭动画链表中,屏幕刷新哪里会检查链表中是否有节点可以应用于动画
wlr_scene_node_set_enabled(&fadeout_layer->scene->node, true);
wl_list_insert(&fadeout_layers, &fadeout_layer->fadeout_link);
wl_list_insert(&server.fadeout_layers, &fadeout_layer->fadeout_link);
// 请求刷新屏幕
if (l->mon)

View file

@ -279,10 +279,10 @@ static inline int32_t client_is_unmanaged(Client *c) {
static inline void client_notify_enter(struct wlr_surface *s,
struct wlr_keyboard *kb) {
if (kb)
wlr_seat_keyboard_notify_enter(seat, s, kb->keycodes, kb->num_keycodes,
&kb->modifiers);
wlr_seat_keyboard_notify_enter(server.seat, s, kb->keycodes,
kb->num_keycodes, &kb->modifiers);
else
wlr_seat_keyboard_notify_enter(seat, s, NULL, 0, NULL);
wlr_seat_keyboard_notify_enter(server.seat, s, NULL, 0, NULL);
}
static inline void client_send_close(Client *c) {

View file

@ -2667,8 +2667,8 @@ void parse_config_file(Config *config, const char *file_path) {
if (file_path[0] == '.' && file_path[1] == '/') {
// Relative path
if (cli_config_path) {
char *config_path = strdup(cli_config_path);
if (server.cli_config_path) {
char *config_path = strdup(server.cli_config_path);
char *config_dir = dirname(config_path);
snprintf(full_path, sizeof(full_path), "%s/%s", config_dir,
file_path + 1);
@ -2750,33 +2750,33 @@ void free_circle_layout(Config *config) {
}
void free_baked_points(void) {
if (baked_points_move) {
free(baked_points_move);
baked_points_move = NULL;
if (server.baked_points_move) {
free(server.baked_points_move);
server.baked_points_move = NULL;
}
if (baked_points_open) {
free(baked_points_open);
baked_points_open = NULL;
if (server.baked_points_open) {
free(server.baked_points_open);
server.baked_points_open = NULL;
}
if (baked_points_close) {
free(baked_points_close);
baked_points_close = NULL;
if (server.baked_points_close) {
free(server.baked_points_close);
server.baked_points_close = NULL;
}
if (baked_points_tag) {
free(baked_points_tag);
baked_points_tag = NULL;
if (server.baked_points_tag) {
free(server.baked_points_tag);
server.baked_points_tag = NULL;
}
if (baked_points_focus) {
free(baked_points_focus);
baked_points_focus = NULL;
if (server.baked_points_focus) {
free(server.baked_points_focus);
server.baked_points_focus = NULL;
}
if (baked_points_opafadein) {
free(baked_points_opafadein);
baked_points_opafadein = NULL;
if (server.baked_points_opafadein) {
free(server.baked_points_opafadein);
server.baked_points_opafadein = NULL;
}
if (baked_points_opafadeout) {
free(baked_points_opafadeout);
baked_points_opafadeout = NULL;
if (server.baked_points_opafadeout) {
free(server.baked_points_opafadeout);
server.baked_points_opafadeout = NULL;
}
}
@ -3300,7 +3300,7 @@ void set_value_default() {
config.overviewgappo = overviewgappo; /* overview时 窗口与窗口 缝隙大小 */
config.cursor_hide_timeout = cursor_hide_timeout;
config.warpcursor = warpcursor; /* Warp cursor to focused client */
config.warpcursor = warpcursor; /* Warp server.cursor to focused client */
config.drag_corner = drag_corner;
config.drag_warp_cursor = drag_warp_cursor;
@ -3453,8 +3453,8 @@ void parse_config(void) {
create_config_keymap();
if (cli_config_path) {
snprintf(filename, sizeof(filename), "%s", cli_config_path);
if (server.cli_config_path) {
snprintf(filename, sizeof(filename), "%s", server.cli_config_path);
} else {
// 获取当前用户家目录
const char *homedir = getenv("HOME");
@ -3484,21 +3484,22 @@ void parse_config(void) {
void reset_blur_params(void) {
if (blur) {
Monitor *m = NULL;
wl_list_for_each(m, &mons, link) {
wl_list_for_each(m, &server.mons, link) {
if (m->blur != NULL) {
wlr_scene_node_destroy(&m->blur->node);
}
m->blur = wlr_scene_optimized_blur_create(&scene->tree, 0, 0);
wlr_scene_node_reparent(&m->blur->node, layers[LyrBlur]);
m->blur =
wlr_scene_optimized_blur_create(&server.scene->tree, 0, 0);
wlr_scene_node_reparent(&m->blur->node, server.layers[LyrBlur]);
wlr_scene_optimized_blur_set_size(m->blur, m->m.width, m->m.height);
wlr_scene_set_blur_data(
scene, blur_params.num_passes, blur_params.radius,
server.scene, blur_params.num_passes, blur_params.radius,
blur_params.noise, blur_params.brightness, blur_params.contrast,
blur_params.saturation);
}
} else {
Monitor *m = NULL;
wl_list_for_each(m, &mons, link) {
wl_list_for_each(m, &server.mons, link) {
if (m->blur) {
wlr_scene_node_destroy(&m->blur->node);
@ -3517,7 +3518,7 @@ void reapply_monitor_rules(void) {
struct wlr_output_mode *internal_mode = NULL;
wlr_output_state_init(&state);
wl_list_for_each(m, &mons, link) {
wl_list_for_each(m, &server.mons, link) {
if (!m->wlr_output->enabled) {
continue;
}
@ -3553,7 +3554,8 @@ void reapply_monitor_rules(void) {
wlr_output_state_set_scale(&state, mr->scale);
wlr_output_state_set_transform(&state, mr->rr);
wlr_output_layout_add(output_layout, m->wlr_output, mx, my);
wlr_output_layout_add(server.output_layout, m->wlr_output, mx,
my);
}
}
@ -3564,36 +3566,38 @@ void reapply_monitor_rules(void) {
}
void reapply_cursor_style(void) {
if (hide_source) {
wl_event_source_timer_update(hide_source, 0);
wl_event_source_remove(hide_source);
hide_source = NULL;
if (server.hide_source) {
wl_event_source_timer_update(server.hide_source, 0);
wl_event_source_remove(server.hide_source);
server.hide_source = NULL;
}
wlr_cursor_unset_image(cursor);
wlr_cursor_unset_image(server.cursor);
wlr_cursor_set_surface(cursor, NULL, 0, 0);
wlr_cursor_set_surface(server.cursor, NULL, 0, 0);
if (cursor_mgr) {
wlr_xcursor_manager_destroy(cursor_mgr);
cursor_mgr = NULL;
if (server.cursor_mgr) {
wlr_xcursor_manager_destroy(server.cursor_mgr);
server.cursor_mgr = NULL;
}
cursor_mgr = wlr_xcursor_manager_create(config.cursor_theme, cursor_size);
server.cursor_mgr =
wlr_xcursor_manager_create(config.cursor_theme, cursor_size);
Monitor *m = NULL;
wl_list_for_each(m, &mons, link) {
wlr_xcursor_manager_load(cursor_mgr, m->wlr_output->scale);
wl_list_for_each(m, &server.mons, link) {
wlr_xcursor_manager_load(server.cursor_mgr, m->wlr_output->scale);
}
wlr_cursor_set_xcursor(cursor, cursor_mgr, "left_ptr");
wlr_cursor_set_xcursor(server.cursor, server.cursor_mgr, "left_ptr");
hide_source = wl_event_loop_add_timer(wl_display_get_event_loop(dpy),
hidecursor, cursor);
if (cursor_hidden) {
wlr_cursor_unset_image(cursor);
server.hide_source = wl_event_loop_add_timer(
wl_display_get_event_loop(server.dpy), hidecursor, server.cursor);
if (server.cursor_hidden) {
wlr_cursor_unset_image(server.cursor);
} else {
wl_event_source_timer_update(hide_source, cursor_hide_timeout * 1000);
wl_event_source_timer_update(server.hide_source,
cursor_hide_timeout * 1000);
}
}
@ -3601,7 +3605,7 @@ void reapply_border(void) {
Client *c = NULL;
// reset border width when config change
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (c && !c->iskilling) {
if (!c->isnoborder && !c->isfullscreen) {
c->bw = borderpx;
@ -3612,7 +3616,7 @@ void reapply_border(void) {
void reapply_keyboard(void) {
InputDevice *id;
wl_list_for_each(id, &inputdevices, link) {
wl_list_for_each(id, &server.inputdevices, link) {
if (id->wlr_device->type != WLR_INPUT_DEVICE_KEYBOARD) {
continue;
}
@ -3624,7 +3628,7 @@ void reapply_keyboard(void) {
void reapply_pointer(void) {
InputDevice *id;
struct libinput_device *device;
wl_list_for_each(id, &inputdevices, link) {
wl_list_for_each(id, &server.inputdevices, link) {
if (id->wlr_device->type != WLR_INPUT_DEVICE_POINTER) {
continue;
@ -3642,7 +3646,7 @@ void reapply_master(void) {
int32_t i;
Monitor *m = NULL;
for (i = 0; i <= LENGTH(tags); i++) {
wl_list_for_each(m, &mons, link) {
wl_list_for_each(m, &server.mons, link) {
if (!m->wlr_output->enabled) {
continue;
}
@ -3693,7 +3697,7 @@ void parse_tagrule(Monitor *m) {
}
for (i = 1; i <= LENGTH(tags); i++) {
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if ((c->tags & (1 << (i - 1)) & TAGMASK) && ISTILED(c)) {
if (m->pertag->mfacts[i] > 0.0f)
c->master_mfact_per = m->pertag->mfacts[i];
@ -3704,7 +3708,7 @@ void parse_tagrule(Monitor *m) {
void reapply_tagrule(void) {
Monitor *m = NULL;
wl_list_for_each(m, &mons, link) {
wl_list_for_each(m, &server.mons, link) {
if (!m->wlr_output->enabled) {
continue;
}
@ -3729,7 +3733,7 @@ void reset_option(void) {
reapply_tagrule();
reapply_monitor_rules();
arrange(selmon, false, false);
arrange(server.selmon, false, false);
}
int32_t reload_config(const Arg *arg) {

File diff suppressed because it is too large Load diff

View file

@ -116,14 +116,15 @@ void dwl_ipc_output_printstatus_to(DwlIpcOutput *ipc_output) {
const char *title, *appid, *symbol;
char kb_layout[32];
focused = focustop(monitor);
zdwl_ipc_output_v2_send_active(ipc_output->resource, monitor == selmon);
zdwl_ipc_output_v2_send_active(ipc_output->resource,
monitor == server.selmon);
for (tag = 0; tag < LENGTH(tags); tag++) {
numclients = state = focused_client = 0;
tagmask = 1 << tag;
if ((tagmask & monitor->tagset[monitor->seltags]) != 0)
state |= ZDWL_IPC_OUTPUT_V2_TAG_STATE_ACTIVE;
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (c->mon != monitor)
continue;
if (!(c->tags & tagmask))
@ -147,7 +148,7 @@ void dwl_ipc_output_printstatus_to(DwlIpcOutput *ipc_output) {
symbol = monitor->pertag->ltidxs[monitor->pertag->curtag]->symbol;
}
keyboard = &kb_group->wlr_group->keyboard;
keyboard = &server.kb_group->wlr_group->keyboard;
current = xkb_state_serialize_layout(keyboard->xkb_state,
XKB_STATE_LAYOUT_EFFECTIVE);
get_layout_abbr(kb_layout,
@ -202,7 +203,8 @@ void dwl_ipc_output_printstatus_to(DwlIpcOutput *ipc_output) {
if (wl_resource_get_version(ipc_output->resource) >=
ZDWL_IPC_OUTPUT_V2_KEYMODE_SINCE_VERSION) {
zdwl_ipc_output_v2_send_keymode(ipc_output->resource, server.keymode.name);
zdwl_ipc_output_v2_send_keymode(ipc_output->resource,
server.keymode.name);
}
if (wl_resource_get_version(ipc_output->resource) >=
@ -236,9 +238,9 @@ void dwl_ipc_output_set_client_tags(struct wl_client *client,
return;
selected_client->tags = newtags;
if (selmon == monitor)
if (server.selmon == monitor)
focusclient(focustop(monitor), 1);
arrange(selmon, false, false);
arrange(server.selmon, false, false);
printstatus();
}

View file

@ -180,8 +180,8 @@ void refresh_monitors_workspaces_status(Monitor *m) {
}
void workspaces_init() {
/* Create the global workspace manager with activation capability */
ext_manager = wlr_ext_workspace_manager_v1_create(dpy, 1);
/* Create the global workspace manager with server.activation capability */
ext_manager = wlr_ext_workspace_manager_v1_create(server.dpy, 1);
/* Initialize the global workspaces list */
wl_list_init(&workspaces);
}

View file

@ -64,7 +64,7 @@ bool check_tearing_frame_allow(Monitor *m) {
return false;
}
Client *c = selmon->sel;
Client *c = server.selmon->sel;
/* tearing is only allowed for the output with the active client */
if (!c || c->mon != m) {

View file

@ -69,7 +69,7 @@ void dwl_im_relay_set_focus(struct dwl_input_method_relay *relay,
/*------------------协议内部代码------------------------------*/
Monitor *output_from_wlr_output(struct wlr_output *wlr_output) {
Monitor *m = NULL;
wl_list_for_each(m, &mons, link) {
wl_list_for_each(m, &server.mons, link) {
if (m->wlr_output == wlr_output) {
return m;
}
@ -79,11 +79,11 @@ Monitor *output_from_wlr_output(struct wlr_output *wlr_output) {
Monitor *output_nearest_to(int32_t lx, int32_t ly) {
double closest_x, closest_y;
wlr_output_layout_closest_point(output_layout, NULL, lx, ly, &closest_x,
&closest_y);
wlr_output_layout_closest_point(server.output_layout, NULL, lx, ly,
&closest_x, &closest_y);
return output_from_wlr_output(
wlr_output_layout_output_at(output_layout, closest_x, closest_y));
return output_from_wlr_output(wlr_output_layout_output_at(
server.output_layout, closest_x, closest_y));
}
bool output_is_usable(Monitor *m) { return m && m->wlr_output->enabled; }
@ -112,7 +112,7 @@ get_keyboard_grab(KeyboardGroup *keyboard) {
}
// kb_group是一个物理键盘组它不应该被过滤掉
if (keyboard != kb_group)
if (keyboard != server.kb_group)
return NULL;
if (is_keyboard_emulated_by_input_method(&keyboard->wlr_group->keyboard,
@ -259,7 +259,8 @@ static void update_popup_position(struct dwl_input_method_popup *popup) {
if (!output_is_usable(output)) {
return;
}
wlr_output_layout_get_box(output_layout, output->wlr_output, &output_box);
wlr_output_layout_get_box(server.output_layout, output->wlr_output,
&output_box);
pointer_rules = (struct wlr_xdg_positioner_rules){
.anchor_rect = cursor_rect,
@ -348,7 +349,7 @@ static void handle_input_method_grab_keyboard(struct wl_listener *listener,
wl_container_of(listener, relay, input_method_grab_keyboard);
struct wlr_input_method_keyboard_grab_v2 *keyboard_grab = data;
struct wlr_keyboard *active_keyboard = wlr_seat_get_keyboard(seat);
struct wlr_keyboard *active_keyboard = wlr_seat_get_keyboard(server.seat);
if (!is_keyboard_emulated_by_input_method(active_keyboard,
relay->input_method)) {
@ -411,7 +412,7 @@ static void handle_input_method_new_popup_surface(struct wl_listener *listener,
wl_signal_add(&popup->popup_surface->surface->events.commit,
&popup->commit);
popup->tree = wlr_scene_tree_create(layers[LyrIMPopup]);
popup->tree = wlr_scene_tree_create(server.layers[LyrIMPopup]);
popup->scene_surface = wlr_scene_subsurface_tree_create(
popup->tree, popup->popup_surface->surface);
popup->scene_surface->node.data = popup;
@ -425,7 +426,7 @@ static void handle_new_input_method(struct wl_listener *listener, void *data) {
struct dwl_input_method_relay *relay =
wl_container_of(listener, relay, new_input_method);
struct wlr_input_method_v2 *input_method = data;
if (seat != input_method->seat) {
if (server.seat != input_method->seat) {
return;
}
@ -531,7 +532,7 @@ static void handle_new_text_input(struct wl_listener *listener, void *data) {
struct wlr_text_input_v3 *wlr_text_input = data;
struct text_input *text_input = ecalloc(1, sizeof(struct text_input));
if (seat != wlr_text_input->seat) {
if (server.seat != wlr_text_input->seat) {
return;
}
@ -568,7 +569,7 @@ struct dwl_input_method_relay *dwl_im_relay_create() {
ecalloc(1, sizeof(struct dwl_input_method_relay));
wl_list_init(&relay->text_inputs);
wl_list_init(&relay->popups);
relay->popup_tree = wlr_scene_tree_create(&scene->tree);
relay->popup_tree = wlr_scene_tree_create(&server.scene->tree);
relay->new_text_input.notify = handle_new_text_input;
wl_signal_add(&text_input_manager->events.text_input,

View file

@ -1,7 +1,7 @@
bool check_hit_no_border(Client *c) {
int32_t i;
bool hit_no_border = false;
if (!render_border) {
if (!server.render_border) {
hit_no_border = true;
}
@ -25,7 +25,7 @@ Client *termforwin(Client *w) {
if (!w->pid || w->isterm || w->noswallow)
return NULL;
wl_list_for_each(c, &fstack, flink) {
wl_list_for_each(c, &server.fstack, flink) {
if (c->isterm && !c->swallowing && c->pid &&
isdescprocess(c->pid, w->pid)) {
return c;
@ -38,8 +38,8 @@ Client *get_client_by_id_or_title(const char *arg_id, const char *arg_title) {
Client *target_client = NULL;
const char *appid, *title;
Client *c = NULL;
wl_list_for_each(c, &clients, link) {
if (!scratchpad_cross_monitor && c->mon != selmon) {
wl_list_for_each(c, &server.clients, link) {
if (!scratchpad_cross_monitor && c->mon != server.selmon) {
continue;
}
@ -81,7 +81,7 @@ setclient_coordinate_center(Client *c, Monitor *tm, struct wlr_box geom,
struct wlr_box tempbox;
int32_t offset = 0;
int32_t len = 0;
Monitor *m = tm ? tm : selmon;
Monitor *m = tm ? tm : server.selmon;
uint32_t cbw = check_hit_no_border(c) ? c->bw : 0;
@ -140,7 +140,7 @@ Client *center_tiled_select(Monitor *m) {
int64_t mini_distance = -1;
int32_t dirx, diry;
int64_t distance;
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (c && VISIBLEON(c, m) && ISSCROLLTILED(c) &&
client_surface(c)->mapped && !c->isfloating &&
!client_is_unmanaged(c)) {
@ -162,7 +162,7 @@ Client *find_client_by_direction(Client *tc, const Arg *arg, bool findfloating,
int32_t last = -1;
// 第一次遍历,计算客户端数量
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (c && (findfloating || !c->isfloating) && !c->isunglobal &&
(focus_cross_monitor || c->mon == tc->mon) &&
(c->tags & c->mon->tagset[c->mon->seltags])) {
@ -183,7 +183,7 @@ Client *find_client_by_direction(Client *tc, const Arg *arg, bool findfloating,
// 第二次遍历,填充 tempClients
last = -1;
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (c && (findfloating || !c->isfloating) && !c->isunglobal &&
(focus_cross_monitor || c->mon == tc->mon) &&
(c->tags & c->mon->tagset[c->mon->seltags])) {
@ -444,20 +444,20 @@ Client *find_client_by_direction(Client *tc, const Arg *arg, bool findfloating,
Client *direction_select(const Arg *arg) {
Client *tc = selmon->sel;
Client *tc = server.selmon->sel;
if (!tc)
return NULL;
if (tc && (tc->isfullscreen || tc->ismaximizescreen) &&
(!is_scroller_layout(selmon) || tc->isfloating)) {
(!is_scroller_layout(server.selmon) || tc->isfloating)) {
return NULL;
}
return find_client_by_direction(
tc, arg, true,
(is_scroller_layout(selmon) || is_centertile_layout(selmon)) &&
!selmon->isoverview);
return find_client_by_direction(tc, arg, true,
(is_scroller_layout(server.selmon) ||
is_centertile_layout(server.selmon)) &&
!server.selmon->isoverview);
}
/* We probably should change the name of this, it sounds like
@ -465,7 +465,7 @@ Client *direction_select(const Arg *arg) {
* only return that client */
Client *focustop(Monitor *m) {
Client *c = NULL;
wl_list_for_each(c, &fstack, flink) {
wl_list_for_each(c, &server.fstack, flink) {
if (c->iskilling || c->isunglobal)
continue;
if (VISIBLEON(c, m))
@ -481,7 +481,7 @@ Client *get_next_stack_client(Client *c, bool reverse) {
Client *next = NULL;
if (reverse) {
wl_list_for_each_reverse(next, &c->link, link) {
if (&next->link == &clients)
if (&next->link == &server.clients)
continue; /* wrap past the sentinel node */
if (next->isunglobal)
@ -492,7 +492,7 @@ Client *get_next_stack_client(Client *c, bool reverse) {
}
} else {
wl_list_for_each(next, &c->link, link) {
if (&next->link == &clients)
if (&next->link == &server.clients)
continue; /* wrap past the sentinel node */
if (next->isunglobal)
@ -507,19 +507,21 @@ Client *get_next_stack_client(Client *c, bool reverse) {
float *get_border_color(Client *c) {
if (c->mon != selmon) {
if (c->mon != server.selmon) {
return bordercolor;
} else if (c->isurgent) {
return urgentcolor;
} else if (c->is_in_scratchpad && selmon && c == selmon->sel) {
} else if (c->is_in_scratchpad && server.selmon &&
c == server.selmon->sel) {
return scratchpadcolor;
} else if (c->isglobal && selmon && c == selmon->sel) {
} else if (c->isglobal && server.selmon && c == server.selmon->sel) {
return globalcolor;
} else if (c->isoverlay && selmon && c == selmon->sel) {
} else if (c->isoverlay && server.selmon && c == server.selmon->sel) {
return overlaycolor;
} else if (c->ismaximizescreen && selmon && c == selmon->sel) {
} else if (c->ismaximizescreen && server.selmon &&
c == server.selmon->sel) {
return maximizescreencolor;
} else if (selmon && c == selmon->sel) {
} else if (server.selmon && c == server.selmon->sel) {
return focuscolor;
} else {
return bordercolor;
@ -609,7 +611,7 @@ Client *get_focused_stack_client(Client *sc) {
if (fc->isfloating || sc->isfloating)
return sc;
wl_list_for_each(tc, &fstack, flink) {
wl_list_for_each(tc, &server.fstack, flink) {
if (tc->iskilling || tc->isunglobal)
continue;
if (!VISIBLEON(tc, sc->mon))

View file

@ -90,7 +90,8 @@ void xytonode(double x, double y, struct wlr_surface **psurface, Client **pc,
if (layer == LyrFadeOut)
continue;
if (!(node = wlr_scene_node_at(&layers[layer]->node, x, y, nx, ny)))
if (!(node =
wlr_scene_node_at(&server.layers[layer]->node, x, y, nx, ny)))
continue;
if (!node->enabled)

View file

@ -1,18 +1,19 @@
Monitor *dirtomon(enum wlr_direction dir) {
struct wlr_output *next;
if (!wlr_output_layout_get(output_layout, selmon->wlr_output))
return selmon;
if ((next = wlr_output_layout_adjacent_output(output_layout, 1 << dir,
selmon->wlr_output,
selmon->m.x, selmon->m.y)))
if (!wlr_output_layout_get(server.output_layout, server.selmon->wlr_output))
return server.selmon;
if ((next = wlr_output_layout_adjacent_output(
server.output_layout, 1 << dir, server.selmon->wlr_output,
server.selmon->m.x, server.selmon->m.y)))
return next->data;
if ((next = wlr_output_layout_farthest_output(
output_layout,
server.output_layout,
dir ^ (WLR_DIRECTION_LEFT | WLR_DIRECTION_RIGHT |
WLR_DIRECTION_UP | WLR_DIRECTION_DOWN),
selmon->wlr_output, selmon->m.x, selmon->m.y)))
server.selmon->wlr_output, server.selmon->m.x,
server.selmon->m.y)))
return next->data;
return selmon;
return server.selmon;
}
bool is_scroller_layout(Monitor *m) {
@ -37,7 +38,7 @@ bool is_centertile_layout(Monitor *m) {
uint32_t get_tag_status(uint32_t tag, Monitor *m) {
Client *c = NULL;
uint32_t status = 0;
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (c->mon == m && c->tags & 1 << (tag - 1) & TAGMASK) {
if (c->isurgent) {
status = 2;
@ -54,7 +55,7 @@ uint32_t get_tags_first_tag_num(uint32_t source_tags) {
tag = 0;
if (!source_tags) {
return selmon->pertag->curtag;
return server.selmon->pertag->curtag;
}
for (i = 0; !(tag & 1) && source_tags != 0 && i < LENGTH(tags); i++) {
@ -76,7 +77,7 @@ uint32_t get_tags_first_tag(uint32_t source_tags) {
tag = 0;
if (!source_tags) {
return selmon->pertag->curtag;
return server.selmon->pertag->curtag;
}
for (i = 0; !(tag & 1) && source_tags != 0 && i < LENGTH(tags); i++) {
@ -93,6 +94,7 @@ uint32_t get_tags_first_tag(uint32_t source_tags) {
}
Monitor *xytomon(double x, double y) {
struct wlr_output *o = wlr_output_layout_output_at(output_layout, x, y);
struct wlr_output *o =
wlr_output_layout_output_at(server.output_layout, x, y);
return o ? o->data : NULL;
}

View file

@ -5,7 +5,7 @@ void set_size_per(Monitor *m, Client *c) {
if (!m || !c)
return;
wl_list_for_each(fc, &clients, link) {
wl_list_for_each(fc, &server.clients, link) {
if (VISIBLEON(fc, m) && ISTILED(fc) && fc != c) {
c->master_mfact_per = fc->master_mfact_per;
c->master_inner_per = fc->master_inner_per;
@ -22,7 +22,7 @@ void set_size_per(Monitor *m, Client *c) {
}
}
void resize_tile_master_horizontal(Client *grabc, bool isdrag, int32_t offsetx,
void resize_tile_master_horizontal(Client *rec, bool isdrag, int32_t offsetx,
int32_t offsety, uint32_t time,
int32_t type) {
Client *tc = NULL;
@ -36,14 +36,16 @@ void resize_tile_master_horizontal(Client *grabc, bool isdrag, int32_t offsetx,
bool begin_find_prevprev = false;
// 从当前节点的下一个开始遍历
for (node = grabc->link.next; node != &clients; node = node->next) {
for (node = rec->link.next; node != &server.clients;
node = node->next) {
tc = wl_container_of(node, tc, link);
if (begin_find_nextnext && VISIBLEON(tc, grabc->mon) && ISTILED(tc)) {
if (begin_find_nextnext && VISIBLEON(tc, rec->mon) &&
ISTILED(tc)) {
nextnext = tc;
break;
}
if (!begin_find_nextnext && VISIBLEON(tc, grabc->mon) &&
if (!begin_find_nextnext && VISIBLEON(tc, rec->mon) &&
ISTILED(tc)) { // 根据你的实际字段名调整
next = tc;
begin_find_nextnext = true;
@ -52,15 +54,17 @@ void resize_tile_master_horizontal(Client *grabc, bool isdrag, int32_t offsetx,
}
// 从当前节点的上一个开始遍历
for (node = grabc->link.prev; node != &clients; node = node->prev) {
for (node = rec->link.prev; node != &server.clients;
node = node->prev) {
tc = wl_container_of(node, tc, link);
if (begin_find_prevprev && VISIBLEON(tc, grabc->mon) && ISTILED(tc)) {
if (begin_find_prevprev && VISIBLEON(tc, rec->mon) &&
ISTILED(tc)) {
prevprev = tc;
break;
}
if (!begin_find_prevprev && VISIBLEON(tc, grabc->mon) &&
if (!begin_find_prevprev && VISIBLEON(tc, rec->mon) &&
ISTILED(tc)) { // 根据你的实际字段名调整
prev = tc;
begin_find_prevprev = true;
@ -68,45 +72,48 @@ void resize_tile_master_horizontal(Client *grabc, bool isdrag, int32_t offsetx,
}
}
if (!start_drag_window && isdrag) {
drag_begin_cursorx = cursor->x;
drag_begin_cursory = cursor->y;
start_drag_window = true;
if (!server.start_drag_window && isdrag) {
server.drag_begin_cursorx = server.cursor->x;
server.drag_begin_cursory = server.cursor->y;
server.start_drag_window = true;
// 记录初始状态
grabc->old_master_mfact_per = grabc->master_mfact_per;
grabc->old_master_inner_per = grabc->master_inner_per;
grabc->old_stack_inner_per = grabc->stack_inner_per;
grabc->cursor_in_upper_half =
cursor->y < grabc->geom.y + grabc->geom.height / 2;
grabc->cursor_in_left_half =
cursor->x < grabc->geom.x + grabc->geom.width / 2;
rec->old_master_mfact_per = rec->master_mfact_per;
rec->old_master_inner_per = rec->master_inner_per;
rec->old_stack_inner_per = rec->stack_inner_per;
rec->cursor_in_upper_half =
server.cursor->y <
rec->geom.y + rec->geom.height / 2;
rec->cursor_in_left_half =
server.cursor->x <
rec->geom.x + rec->geom.width / 2;
// 记录初始几何信息
grabc->drag_begin_geom = grabc->geom;
rec->drag_begin_geom = rec->geom;
} else {
// 计算相对于屏幕尺寸的比例变化
if (isdrag) {
offsetx = cursor->x - drag_begin_cursorx;
offsety = cursor->y - drag_begin_cursory;
offsetx = server.cursor->x - server.drag_begin_cursorx;
offsety = server.cursor->y - server.drag_begin_cursory;
} else {
grabc->old_master_mfact_per = grabc->master_mfact_per;
grabc->old_master_inner_per = grabc->master_inner_per;
grabc->old_stack_inner_per = grabc->stack_inner_per;
grabc->drag_begin_geom = grabc->geom;
grabc->cursor_in_upper_half = true;
grabc->cursor_in_left_half = false;
rec->old_master_mfact_per = rec->master_mfact_per;
rec->old_master_inner_per = rec->master_inner_per;
rec->old_stack_inner_per = rec->stack_inner_per;
rec->drag_begin_geom = rec->geom;
rec->cursor_in_upper_half = true;
rec->cursor_in_left_half = false;
}
if (grabc->ismaster) {
delta_x = (float)(offsetx) * (grabc->old_master_mfact_per) /
grabc->drag_begin_geom.width;
delta_y = (float)(offsety) * (grabc->old_master_inner_per) /
grabc->drag_begin_geom.height;
if (rec->ismaster) {
delta_x = (float)(offsetx) * (rec->old_master_mfact_per) /
rec->drag_begin_geom.width;
delta_y = (float)(offsety) * (rec->old_master_inner_per) /
rec->drag_begin_geom.height;
} else {
delta_x = (float)(offsetx) * (1 - grabc->old_master_mfact_per) /
grabc->drag_begin_geom.width;
delta_y = (float)(offsety) * (grabc->old_stack_inner_per) /
grabc->drag_begin_geom.height;
delta_x = (float)(offsetx) *
(1 - rec->old_master_mfact_per) /
rec->drag_begin_geom.width;
delta_y = (float)(offsety) * (rec->old_stack_inner_per) /
rec->drag_begin_geom.height;
}
bool moving_up;
bool moving_down;
@ -115,49 +122,50 @@ void resize_tile_master_horizontal(Client *grabc, bool isdrag, int32_t offsetx,
moving_up = offsety < 0 ? true : false;
moving_down = offsety > 0 ? true : false;
} else {
moving_up = cursor->y < drag_begin_cursory;
moving_down = cursor->y > drag_begin_cursory;
moving_up = server.cursor->y < server.drag_begin_cursory;
moving_down = server.cursor->y > server.drag_begin_cursory;
}
if (grabc->ismaster && !prev) {
if (rec->ismaster && !prev) {
if (moving_up) {
delta_y = -fabsf(delta_y);
} else {
delta_y = fabsf(delta_y);
}
} else if (grabc->ismaster && next && !next->ismaster) {
} else if (rec->ismaster && next && !next->ismaster) {
if (moving_up) {
delta_y = fabsf(delta_y);
} else {
delta_y = -fabsf(delta_y);
}
} else if (!grabc->ismaster && prev && prev->ismaster) {
} else if (!rec->ismaster && prev && prev->ismaster) {
if (moving_up) {
delta_y = -fabsf(delta_y);
} else {
delta_y = fabsf(delta_y);
}
} else if (!grabc->ismaster && !next) {
} else if (!rec->ismaster && !next) {
if (moving_up) {
delta_y = fabsf(delta_y);
} else {
delta_y = -fabsf(delta_y);
}
} else if (type == CENTER_TILE && !grabc->ismaster && !nextnext) {
} else if (type == CENTER_TILE && !rec->ismaster &&
!nextnext) {
if (moving_up) {
delta_y = fabsf(delta_y);
} else {
delta_y = -fabsf(delta_y);
}
} else if (type == CENTER_TILE && !grabc->ismaster && prevprev &&
} else if (type == CENTER_TILE && !rec->ismaster && prevprev &&
prevprev->ismaster) {
if (moving_up) {
delta_y = -fabsf(delta_y);
} else {
delta_y = fabsf(delta_y);
}
} else if ((grabc->cursor_in_upper_half && moving_up) ||
(!grabc->cursor_in_upper_half && moving_down)) {
} else if ((rec->cursor_in_upper_half && moving_up) ||
(!rec->cursor_in_upper_half && moving_down)) {
// 光标在窗口上方且向上移动,或在窗口下方且向下移动 → 增加高度
delta_y = fabsf(delta_y);
delta_y = delta_y * 2;
@ -167,16 +175,17 @@ void resize_tile_master_horizontal(Client *grabc, bool isdrag, int32_t offsetx,
delta_y = delta_y * 2;
}
if (!grabc->ismaster && grabc->isleftstack && type == CENTER_TILE) {
if (!rec->ismaster && rec->isleftstack &&
type == CENTER_TILE) {
delta_x = delta_x * -1.0f;
}
if (grabc->ismaster && type == CENTER_TILE &&
grabc->cursor_in_left_half) {
if (rec->ismaster && type == CENTER_TILE &&
rec->cursor_in_left_half) {
delta_x = delta_x * -1.0f;
}
if (grabc->ismaster && type == CENTER_TILE) {
if (rec->ismaster && type == CENTER_TILE) {
delta_x = delta_x * 2;
}
@ -185,9 +194,11 @@ void resize_tile_master_horizontal(Client *grabc, bool isdrag, int32_t offsetx,
}
// 直接设置新的比例,基于初始值 + 变化量
float new_master_mfact_per = grabc->old_master_mfact_per + delta_x;
float new_master_inner_per = grabc->old_master_inner_per + delta_y;
float new_stack_inner_per = grabc->old_stack_inner_per + delta_y;
float new_master_mfact_per =
rec->old_master_mfact_per + delta_x;
float new_master_inner_per =
rec->old_master_inner_per + delta_y;
float new_stack_inner_per = rec->old_stack_inner_per + delta_y;
// 应用限制,确保比例在合理范围内
new_master_mfact_per = fmaxf(0.1f, fminf(0.9f, new_master_mfact_per));
@ -195,29 +206,29 @@ void resize_tile_master_horizontal(Client *grabc, bool isdrag, int32_t offsetx,
new_stack_inner_per = fmaxf(0.1f, fminf(0.9f, new_stack_inner_per));
// 应用到所有平铺窗口
wl_list_for_each(tc, &clients, link) {
if (VISIBLEON(tc, grabc->mon) && ISTILED(tc)) {
wl_list_for_each(tc, &server.clients, link) {
if (VISIBLEON(tc, rec->mon) && ISTILED(tc)) {
tc->master_mfact_per = new_master_mfact_per;
}
}
grabc->master_inner_per = new_master_inner_per;
grabc->stack_inner_per = new_stack_inner_per;
rec->master_inner_per = new_master_inner_per;
rec->stack_inner_per = new_stack_inner_per;
if (!isdrag) {
arrange(grabc->mon, false, false);
arrange(rec->mon, false, false);
return;
}
if (last_apply_drap_time == 0 ||
time - last_apply_drap_time > drag_tile_refresh_interval) {
arrange(grabc->mon, false, false);
last_apply_drap_time = time;
if (server.last_apply_drag_time == 0 ||
time - server.last_apply_drag_time > drag_tile_refresh_interval) {
arrange(rec->mon, false, false);
server.last_apply_drag_time = time;
}
}
}
void resize_tile_master_vertical(Client *grabc, bool isdrag, int32_t offsetx,
void resize_tile_master_vertical(Client *rec, bool isdrag, int32_t offsetx,
int32_t offsety, uint32_t time, int32_t type) {
Client *tc = NULL;
float delta_x, delta_y;
@ -226,10 +237,11 @@ void resize_tile_master_vertical(Client *grabc, bool isdrag, int32_t offsetx,
struct wl_list *node;
// 从当前节点的下一个开始遍历
for (node = grabc->link.next; node != &clients; node = node->next) {
for (node = rec->link.next; node != &server.clients;
node = node->next) {
tc = wl_container_of(node, tc, link);
if (VISIBLEON(tc, grabc->mon) &&
if (VISIBLEON(tc, rec->mon) &&
ISTILED(tc)) { // 根据你的实际字段名调整
next = tc;
break;
@ -237,58 +249,62 @@ void resize_tile_master_vertical(Client *grabc, bool isdrag, int32_t offsetx,
}
// 从当前节点的上一个开始遍历
for (node = grabc->link.prev; node != &clients; node = node->prev) {
for (node = rec->link.prev; node != &server.clients;
node = node->prev) {
tc = wl_container_of(node, tc, link);
if (VISIBLEON(tc, grabc->mon) &&
if (VISIBLEON(tc, rec->mon) &&
ISTILED(tc)) { // 根据你的实际字段名调整
prev = tc;
break;
}
}
if (!start_drag_window && isdrag) {
drag_begin_cursorx = cursor->x;
drag_begin_cursory = cursor->y;
start_drag_window = true;
if (!server.start_drag_window && isdrag) {
server.drag_begin_cursorx = server.cursor->x;
server.drag_begin_cursory = server.cursor->y;
server.start_drag_window = true;
// 记录初始状态
grabc->old_master_mfact_per = grabc->master_mfact_per;
grabc->old_master_inner_per = grabc->master_inner_per;
grabc->old_stack_inner_per = grabc->stack_inner_per;
grabc->cursor_in_upper_half =
cursor->y < grabc->geom.y + grabc->geom.height / 2;
grabc->cursor_in_left_half =
cursor->x < grabc->geom.x + grabc->geom.width / 2;
rec->old_master_mfact_per = rec->master_mfact_per;
rec->old_master_inner_per = rec->master_inner_per;
rec->old_stack_inner_per = rec->stack_inner_per;
rec->cursor_in_upper_half =
server.cursor->y <
rec->geom.y + rec->geom.height / 2;
rec->cursor_in_left_half =
server.cursor->x <
rec->geom.x + rec->geom.width / 2;
// 记录初始几何信息
grabc->drag_begin_geom = grabc->geom;
rec->drag_begin_geom = rec->geom;
} else {
// 计算相对于屏幕尺寸的比例变化
// 计算相对于屏幕尺寸的比例变化
if (isdrag) {
offsetx = cursor->x - drag_begin_cursorx;
offsety = cursor->y - drag_begin_cursory;
offsetx = server.cursor->x - server.drag_begin_cursorx;
offsety = server.cursor->y - server.drag_begin_cursory;
} else {
grabc->old_master_mfact_per = grabc->master_mfact_per;
grabc->old_master_inner_per = grabc->master_inner_per;
grabc->old_stack_inner_per = grabc->stack_inner_per;
grabc->drag_begin_geom = grabc->geom;
grabc->cursor_in_upper_half = true;
grabc->cursor_in_left_half = false;
rec->old_master_mfact_per = rec->master_mfact_per;
rec->old_master_inner_per = rec->master_inner_per;
rec->old_stack_inner_per = rec->stack_inner_per;
rec->drag_begin_geom = rec->geom;
rec->cursor_in_upper_half = true;
rec->cursor_in_left_half = false;
}
if (grabc->ismaster) {
if (rec->ismaster) {
// 垂直版本:左右移动调整高度比例,上下移动调整宽度比例
delta_x = (float)(offsetx) * (grabc->old_master_inner_per) /
grabc->drag_begin_geom.width;
delta_y = (float)(offsety) * (grabc->old_master_mfact_per) /
grabc->drag_begin_geom.height;
delta_x = (float)(offsetx) * (rec->old_master_inner_per) /
rec->drag_begin_geom.width;
delta_y = (float)(offsety) * (rec->old_master_mfact_per) /
rec->drag_begin_geom.height;
} else {
delta_x = (float)(offsetx) * (grabc->old_stack_inner_per) /
grabc->drag_begin_geom.width;
delta_y = (float)(offsety) * (1 - grabc->old_master_mfact_per) /
grabc->drag_begin_geom.height;
delta_x = (float)(offsetx) * (rec->old_stack_inner_per) /
rec->drag_begin_geom.width;
delta_y = (float)(offsety) *
(1 - rec->old_master_mfact_per) /
rec->drag_begin_geom.height;
}
bool moving_left;
@ -298,37 +314,37 @@ void resize_tile_master_vertical(Client *grabc, bool isdrag, int32_t offsetx,
moving_left = offsetx < 0 ? true : false;
moving_right = offsetx > 0 ? true : false;
} else {
moving_left = cursor->x < drag_begin_cursorx;
moving_right = cursor->x > drag_begin_cursorx;
moving_left = server.cursor->x < server.drag_begin_cursorx;
moving_right = server.cursor->x > server.drag_begin_cursorx;
}
// 调整主区域和栈区域的高度比例(垂直分割)
if (grabc->ismaster && !prev) {
if (rec->ismaster && !prev) {
if (moving_left) {
delta_x = -fabsf(delta_x); // 向上移动减少主区域高度
} else {
delta_x = fabsf(delta_x); // 向下移动增加主区域高度
}
} else if (grabc->ismaster && next && !next->ismaster) {
} else if (rec->ismaster && next && !next->ismaster) {
if (moving_left) {
delta_x = fabsf(delta_x); // 向上移动增加主区域高度
} else {
delta_x = -fabsf(delta_x); // 向下移动减少主区域高度
}
} else if (!grabc->ismaster && prev && prev->ismaster) {
} else if (!rec->ismaster && prev && prev->ismaster) {
if (moving_left) {
delta_x = -fabsf(delta_x); // 向上移动减少栈区域高度
} else {
delta_x = fabsf(delta_x); // 向下移动增加栈区域高度
}
} else if (!grabc->ismaster && !next) {
} else if (!rec->ismaster && !next) {
if (moving_left) {
delta_x = fabsf(delta_x); // 向上移动增加栈区域高度
} else {
delta_x = -fabsf(delta_x); // 向下移动减少栈区域高度
}
} else if ((grabc->cursor_in_left_half && moving_left) ||
(!grabc->cursor_in_left_half && moving_right)) {
} else if ((rec->cursor_in_left_half && moving_left) ||
(!rec->cursor_in_left_half && moving_right)) {
// 光标在窗口左侧且向左移动,或在窗口右侧且向右移动 → 增加宽度
delta_x = fabsf(delta_x);
delta_x = delta_x * 2;
@ -339,11 +355,11 @@ void resize_tile_master_vertical(Client *grabc, bool isdrag, int32_t offsetx,
}
// 直接设置新的比例,基于初始值 + 变化量
float new_master_mfact_per = grabc->old_master_mfact_per +
float new_master_mfact_per = rec->old_master_mfact_per +
delta_y; // 垂直delta_y调整主区域高度
float new_master_inner_per = grabc->old_master_inner_per +
float new_master_inner_per = rec->old_master_inner_per +
delta_x; // 垂直delta_x调整主区域内部宽度
float new_stack_inner_per = grabc->old_stack_inner_per +
float new_stack_inner_per = rec->old_stack_inner_per +
delta_x; // 垂直delta_x调整栈区域内部宽度
// 应用限制,确保比例在合理范围内
@ -352,85 +368,87 @@ void resize_tile_master_vertical(Client *grabc, bool isdrag, int32_t offsetx,
new_stack_inner_per = fmaxf(0.1f, fminf(0.9f, new_stack_inner_per));
// 应用到所有平铺窗口
wl_list_for_each(tc, &clients, link) {
if (VISIBLEON(tc, grabc->mon) && ISTILED(tc)) {
wl_list_for_each(tc, &server.clients, link) {
if (VISIBLEON(tc, rec->mon) && ISTILED(tc)) {
tc->master_mfact_per = new_master_mfact_per;
}
}
grabc->master_inner_per = new_master_inner_per;
grabc->stack_inner_per = new_stack_inner_per;
rec->master_inner_per = new_master_inner_per;
rec->stack_inner_per = new_stack_inner_per;
if (!isdrag) {
arrange(grabc->mon, false, false);
arrange(rec->mon, false, false);
return;
}
if (last_apply_drap_time == 0 ||
time - last_apply_drap_time > drag_tile_refresh_interval) {
arrange(grabc->mon, false, false);
last_apply_drap_time = time;
if (server.last_apply_drag_time == 0 ||
time - server.last_apply_drag_time > drag_tile_refresh_interval) {
arrange(rec->mon, false, false);
server.last_apply_drag_time = time;
}
}
}
void resize_tile_scroller(Client *grabc, bool isdrag, int32_t offsetx,
void resize_tile_scroller(Client *rec, bool isdrag, int32_t offsetx,
int32_t offsety, uint32_t time, bool isvertical) {
float delta_x, delta_y;
float new_scroller_proportion;
float new_stack_proportion;
Client *stack_head = get_scroll_stack_head(grabc);
Client *stack_head = get_scroll_stack_head(rec);
if (grabc && grabc->mon->visible_tiling_clients == 1 &&
if (rec && rec->mon->visible_tiling_clients == 1 &&
!scroller_ignore_proportion_single)
return;
if (!start_drag_window && isdrag) {
drag_begin_cursorx = cursor->x;
drag_begin_cursory = cursor->y;
start_drag_window = true;
if (!server.start_drag_window && isdrag) {
server.drag_begin_cursorx = server.cursor->x;
server.drag_begin_cursory = server.cursor->y;
server.start_drag_window = true;
// 记录初始状态
stack_head->old_scroller_pproportion = stack_head->scroller_proportion;
grabc->old_stack_proportion = grabc->stack_proportion;
rec->old_stack_proportion = rec->stack_proportion;
grabc->cursor_in_left_half =
cursor->x < grabc->geom.x + grabc->geom.width / 2;
grabc->cursor_in_upper_half =
cursor->y < grabc->geom.y + grabc->geom.height / 2;
rec->cursor_in_left_half =
server.cursor->x <
rec->geom.x + rec->geom.width / 2;
rec->cursor_in_upper_half =
server.cursor->y <
rec->geom.y + rec->geom.height / 2;
// 记录初始几何信息
grabc->drag_begin_geom = grabc->geom;
rec->drag_begin_geom = rec->geom;
} else {
// 计算相对于屏幕尺寸的比例变化
// 计算相对于屏幕尺寸的比例变化
if (isdrag) {
offsetx = cursor->x - drag_begin_cursorx;
offsety = cursor->y - drag_begin_cursory;
offsetx = server.cursor->x - server.drag_begin_cursorx;
offsety = server.cursor->y - server.drag_begin_cursory;
} else {
grabc->old_master_mfact_per = grabc->master_mfact_per;
grabc->old_master_inner_per = grabc->master_inner_per;
grabc->old_stack_inner_per = grabc->stack_inner_per;
grabc->drag_begin_geom = grabc->geom;
rec->old_master_mfact_per = rec->master_mfact_per;
rec->old_master_inner_per = rec->master_inner_per;
rec->old_stack_inner_per = rec->stack_inner_per;
rec->drag_begin_geom = rec->geom;
stack_head->old_scroller_pproportion =
stack_head->scroller_proportion;
grabc->old_stack_proportion = grabc->stack_proportion;
grabc->cursor_in_upper_half = false;
grabc->cursor_in_left_half = false;
rec->old_stack_proportion = rec->stack_proportion;
rec->cursor_in_upper_half = false;
rec->cursor_in_left_half = false;
}
if (isvertical) {
delta_y = (float)(offsety) *
(stack_head->old_scroller_pproportion) /
grabc->drag_begin_geom.height;
delta_x = (float)(offsetx) * (grabc->old_stack_proportion) /
grabc->drag_begin_geom.width;
rec->drag_begin_geom.height;
delta_x = (float)(offsetx) * (rec->old_stack_proportion) /
rec->drag_begin_geom.width;
} else {
delta_x = (float)(offsetx) *
(stack_head->old_scroller_pproportion) /
grabc->drag_begin_geom.width;
delta_y = (float)(offsety) * (grabc->old_stack_proportion) /
grabc->drag_begin_geom.height;
rec->drag_begin_geom.width;
delta_y = (float)(offsety) * (rec->old_stack_proportion) /
rec->drag_begin_geom.height;
}
bool moving_up;
@ -444,14 +462,14 @@ void resize_tile_scroller(Client *grabc, bool isdrag, int32_t offsetx,
moving_left = offsetx < 0 ? true : false;
moving_right = offsetx > 0 ? true : false;
} else {
moving_up = cursor->y < drag_begin_cursory;
moving_down = cursor->y > drag_begin_cursory;
moving_left = cursor->x < drag_begin_cursorx;
moving_right = cursor->x > drag_begin_cursorx;
moving_up = server.cursor->y < server.drag_begin_cursory;
moving_down = server.cursor->y > server.drag_begin_cursory;
moving_left = server.cursor->x < server.drag_begin_cursorx;
moving_right = server.cursor->x > server.drag_begin_cursorx;
}
if ((grabc->cursor_in_upper_half && moving_up) ||
(!grabc->cursor_in_upper_half && moving_down)) {
if ((rec->cursor_in_upper_half && moving_up) ||
(!rec->cursor_in_upper_half && moving_down)) {
// 光标在窗口上方且向上移动,或在窗口下方且向下移动 → 增加高度
delta_y = fabsf(delta_y);
} else {
@ -459,25 +477,28 @@ void resize_tile_scroller(Client *grabc, bool isdrag, int32_t offsetx,
delta_y = -fabsf(delta_y);
}
if ((grabc->cursor_in_left_half && moving_left) ||
(!grabc->cursor_in_left_half && moving_right)) {
if ((rec->cursor_in_left_half && moving_left) ||
(!rec->cursor_in_left_half && moving_right)) {
delta_x = fabsf(delta_x);
} else {
delta_x = -fabsf(delta_x);
}
if (isvertical) {
if (!grabc->next_in_stack && grabc->prev_in_stack && !isdrag) {
if (!rec->next_in_stack && rec->prev_in_stack &&
!isdrag) {
delta_x = delta_x * -1.0f;
}
if (!grabc->next_in_stack && grabc->prev_in_stack && isdrag) {
if (!rec->next_in_stack && rec->prev_in_stack &&
isdrag) {
if (moving_right) {
delta_x = -fabsf(delta_x);
} else {
delta_x = fabsf(delta_x);
}
}
if (!grabc->prev_in_stack && grabc->next_in_stack && isdrag) {
if (!rec->prev_in_stack && rec->next_in_stack &&
isdrag) {
if (moving_left) {
delta_x = -fabsf(delta_x);
} else {
@ -494,17 +515,20 @@ void resize_tile_scroller(Client *grabc, bool isdrag, int32_t offsetx,
}
} else {
if (!grabc->next_in_stack && grabc->prev_in_stack && !isdrag) {
if (!rec->next_in_stack && rec->prev_in_stack &&
!isdrag) {
delta_y = delta_y * -1.0f;
}
if (!grabc->next_in_stack && grabc->prev_in_stack && isdrag) {
if (!rec->next_in_stack && rec->prev_in_stack &&
isdrag) {
if (moving_down) {
delta_y = -fabsf(delta_y);
} else {
delta_y = fabsf(delta_y);
}
}
if (!grabc->prev_in_stack && grabc->next_in_stack && isdrag) {
if (!rec->prev_in_stack && rec->next_in_stack &&
isdrag) {
if (moving_up) {
delta_y = -fabsf(delta_y);
} else {
@ -525,12 +549,12 @@ void resize_tile_scroller(Client *grabc, bool isdrag, int32_t offsetx,
if (isvertical) {
new_scroller_proportion =
stack_head->old_scroller_pproportion + delta_y;
new_stack_proportion = grabc->old_stack_proportion + delta_x;
new_stack_proportion = rec->old_stack_proportion + delta_x;
} else {
new_scroller_proportion =
stack_head->old_scroller_pproportion + delta_x;
new_stack_proportion = grabc->old_stack_proportion + delta_y;
new_stack_proportion = rec->old_stack_proportion + delta_y;
}
// 应用限制,确保比例在合理范围内
@ -538,49 +562,53 @@ void resize_tile_scroller(Client *grabc, bool isdrag, int32_t offsetx,
fmaxf(0.1f, fminf(1.0f, new_scroller_proportion));
new_stack_proportion = fmaxf(0.1f, fminf(1.0f, new_stack_proportion));
grabc->stack_proportion = new_stack_proportion;
rec->stack_proportion = new_stack_proportion;
stack_head->scroller_proportion = new_scroller_proportion;
if (!isdrag) {
arrange(grabc->mon, false, false);
arrange(rec->mon, false, false);
return;
}
if (last_apply_drap_time == 0 ||
time - last_apply_drap_time > drag_tile_refresh_interval) {
arrange(grabc->mon, false, false);
last_apply_drap_time = time;
if (server.last_apply_drag_time == 0 ||
time - server.last_apply_drag_time > drag_tile_refresh_interval) {
arrange(rec->mon, false, false);
server.last_apply_drag_time = time;
}
}
}
void resize_tile_client(Client *grabc, bool isdrag, int32_t offsetx,
void resize_tile_client(Client *rec, bool isdrag, int32_t offsetx,
int32_t offsety, uint32_t time) {
if (!grabc || grabc->isfullscreen || grabc->ismaximizescreen)
if (!rec || rec->isfullscreen ||
rec->ismaximizescreen)
return;
if (grabc->mon->isoverview)
if (rec->mon->isoverview)
return;
const Layout *current_layout =
grabc->mon->pertag->ltidxs[grabc->mon->pertag->curtag];
rec->mon->pertag->ltidxs[rec->mon->pertag->curtag];
if (current_layout->id == TILE || current_layout->id == DECK ||
current_layout->id == CENTER_TILE || current_layout->id == RIGHT_TILE ||
(current_layout->id == TGMIX && grabc->mon->visible_tiling_clients <= 3)
(current_layout->id == TGMIX &&
rec->mon->visible_tiling_clients <= 3)
) {
resize_tile_master_horizontal(grabc, isdrag, offsetx, offsety, time,
current_layout->id);
resize_tile_master_horizontal(rec, isdrag, offsetx, offsety,
time, current_layout->id);
} else if (current_layout->id == VERTICAL_TILE ||
current_layout->id == VERTICAL_DECK) {
resize_tile_master_vertical(grabc, isdrag, offsetx, offsety, time,
current_layout->id);
resize_tile_master_vertical(rec, isdrag, offsetx, offsety,
time, current_layout->id);
} else if (current_layout->id == SCROLLER) {
resize_tile_scroller(grabc, isdrag, offsetx, offsety, time, false);
resize_tile_scroller(rec, isdrag, offsetx, offsety, time,
false);
} else if (current_layout->id == VERTICAL_SCROLLER) {
resize_tile_scroller(grabc, isdrag, offsetx, offsety, time, true);
resize_tile_scroller(rec, isdrag, offsetx, offsety, time,
true);
}
}
@ -597,7 +625,7 @@ void reset_size_per_mon(Monitor *m, int32_t tile_cilent_num,
if (m->pertag->ltidxs[m->pertag->curtag]->id != CENTER_TILE) {
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (VISIBLEON(c, m) && ISTILED(c)) {
if (total_master_inner_percent > 0.0 && i < nmasters) {
c->ismaster = true;
@ -617,7 +645,7 @@ void reset_size_per_mon(Monitor *m, int32_t tile_cilent_num,
}
}
} else {
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (VISIBLEON(c, m) && ISTILED(c)) {
if (total_master_inner_percent > 0.0 && i < nmasters) {
c->ismaster = true;
@ -658,6 +686,34 @@ void reset_size_per_mon(Monitor *m, int32_t tile_cilent_num,
}
}
void resize_floating_window(Client *rec) {
int cdx = (int)round(server.cursor->x) - server.grabcx;
int cdy = (int)round(server.cursor->y) - server.grabcy;
cdx = !(server.rzcorner & 1) &&
rec->geom.width - 2 * (int)rec->bw - cdx < 1
? 0
: cdx;
cdy =
!(server.rzcorner & 2) &&
rec->geom.height - 2 * (int)rec->bw - cdy < 1
? 0
: cdy;
const struct wlr_box box = {
.x = rec->geom.x + (server.rzcorner & 1 ? 0 : cdx),
.y = rec->geom.y + (server.rzcorner & 2 ? 0 : cdy),
.width = rec->geom.width + (server.rzcorner & 1 ? cdx : -cdx),
.height =
rec->geom.height + (server.rzcorner & 2 ? cdy : -cdy)};
rec->float_geom = box;
resize(rec, box, 1);
server.grabcx += cdx;
server.grabcy += cdy;
}
void // 17
arrange(Monitor *m, bool want_animation, bool from_view) {
Client *c = NULL;
@ -680,7 +736,7 @@ arrange(Monitor *m, bool want_animation, bool from_view) {
m->visible_tiling_clients = 0;
m->visible_scroll_tiling_clients = 0;
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (!client_only_in_one_tag(c) || c->isglobal || c->isunglobal) {
exit_scroller_stack(c);
@ -718,7 +774,7 @@ arrange(Monitor *m, bool want_animation, bool from_view) {
nmasters = m->pertag->nmasters[m->pertag->curtag];
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (c->iskilling)
continue;
@ -771,7 +827,7 @@ arrange(Monitor *m, bool want_animation, bool from_view) {
m->pertag->ltidxs[m->pertag->curtag]->arrange(m);
}
if (!start_drag_window) {
if (!server.start_drag_window) {
motionnotify(0, NULL, 0, 0, 0, 0);
checkidleinhibitor(NULL);
}

View file

@ -7,9 +7,9 @@ void grid(Monitor *m) {
Client *c = NULL;
n = 0;
int32_t target_gappo =
enablegaps ? m->isoverview ? overviewgappo : gappoh : 0;
server.enablegaps ? m->isoverview ? overviewgappo : gappoh : 0;
int32_t target_gappi =
enablegaps ? m->isoverview ? overviewgappi : gappih : 0;
server.enablegaps ? m->isoverview ? overviewgappi : gappih : 0;
float single_width_ratio = m->isoverview ? 0.7 : 0.9;
float single_height_ratio = m->isoverview ? 0.8 : 0.9;
@ -20,7 +20,7 @@ void grid(Monitor *m) {
}
if (n == 1) {
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (c->mon != m)
continue;
@ -43,7 +43,7 @@ void grid(Monitor *m) {
cw = (m->w.width - 2 * target_gappo - target_gappi) / 2;
ch = (m->w.height - 2 * target_gappo) * 0.65;
i = 0;
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (c->mon != m)
continue;
@ -89,7 +89,7 @@ void grid(Monitor *m) {
// 调整每个客户端的位置和大小
i = 0;
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (c->mon != m)
continue;
@ -119,9 +119,9 @@ void deck(Monitor *m) {
float mfact;
uint32_t nmasters = m->pertag->nmasters[m->pertag->curtag];
int32_t cur_gappih = enablegaps ? m->gappih : 0;
int32_t cur_gappoh = enablegaps ? m->gappoh : 0;
int32_t cur_gappov = enablegaps ? m->gappov : 0;
int32_t cur_gappih = server.enablegaps ? m->gappih : 0;
int32_t cur_gappoh = server.enablegaps ? m->gappoh : 0;
int32_t cur_gappov = server.enablegaps ? m->gappov : 0;
cur_gappih = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gappih;
cur_gappoh = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gappoh;
@ -132,7 +132,7 @@ void deck(Monitor *m) {
if (n == 0)
return;
wl_list_for_each(fc, &clients, link) {
wl_list_for_each(fc, &server.clients, link) {
if (VISIBLEON(fc, m) && ISTILED(fc))
break;
@ -149,12 +149,12 @@ void deck(Monitor *m) {
mw = m->w.width - 2 * cur_gappoh;
i = my = 0;
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (!VISIBLEON(c, m) || !ISTILED(c))
continue;
if (i < nmasters) {
c->master_mfact_per = mfact;
// Master area clients
// Master area server.clients
resize(
c,
(struct wlr_box){.x = m->w.x + cur_gappoh,
@ -165,7 +165,7 @@ void deck(Monitor *m) {
0);
my += c->geom.height;
} else {
// Stack area clients
// Stack area server.clients
c->master_mfact_per = mfact;
resize(c,
(struct wlr_box){.x = m->w.x + mw + cur_gappoh + cur_gappih,
@ -184,9 +184,9 @@ void deck(Monitor *m) {
void horizontal_scroll_adjust_fullandmax(Client *c,
struct wlr_box *target_geom) {
Monitor *m = c->mon;
int32_t cur_gappih = enablegaps ? m->gappih : 0;
int32_t cur_gappoh = enablegaps ? m->gappoh : 0;
int32_t cur_gappov = enablegaps ? m->gappov : 0;
int32_t cur_gappih = server.enablegaps ? m->gappih : 0;
int32_t cur_gappoh = server.enablegaps ? m->gappoh : 0;
int32_t cur_gappov = server.enablegaps ? m->gappov : 0;
cur_gappih =
smartgaps && m->visible_scroll_tiling_clients == 1 ? 0 : cur_gappih;
@ -283,10 +283,10 @@ void scroller(Monitor *m) {
struct wlr_box target_geom;
int32_t focus_client_index = 0;
bool need_scroller = false;
int32_t cur_gappih = enablegaps ? m->gappih : 0;
int32_t cur_gappoh = enablegaps ? m->gappoh : 0;
int32_t cur_gappov = enablegaps ? m->gappov : 0;
int32_t cur_gappiv = enablegaps ? m->gappiv : 0;
int32_t cur_gappih = server.enablegaps ? m->gappih : 0;
int32_t cur_gappoh = server.enablegaps ? m->gappoh : 0;
int32_t cur_gappov = server.enablegaps ? m->gappov : 0;
int32_t cur_gappiv = server.enablegaps ? m->gappiv : 0;
cur_gappih =
smartgaps && m->visible_scroll_tiling_clients == 1 ? 0 : cur_gappih;
@ -312,7 +312,7 @@ void scroller(Monitor *m) {
// 第二次遍历,填充 tempClients
j = 0;
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (VISIBLEON(c, m) && ISSCROLLTILED(c) && !c->prev_in_stack) {
tempClients[j] = c;
j++;
@ -375,7 +375,7 @@ void scroller(Monitor *m) {
need_scroller = true;
}
if (start_drag_window)
if (server.start_drag_window)
need_scroller = false;
target_geom.height = m->w.height - 2 * cur_gappov;
@ -444,7 +444,7 @@ void scroller(Monitor *m) {
}
void center_tile(Monitor *m) {
int32_t i, n = 0, h, r, ie = enablegaps, mw, mx, my, oty, ety, tw;
int32_t i, n = 0, h, r, ie = server.enablegaps, mw, mx, my, oty, ety, tw;
Client *c = NULL;
Client *fc = NULL;
double mfact = 0;
@ -461,16 +461,16 @@ void center_tile(Monitor *m) {
return;
// 获取第一个可见的平铺客户端用于主区域宽度百分比
wl_list_for_each(fc, &clients, link) {
wl_list_for_each(fc, &server.clients, link) {
if (VISIBLEON(fc, m) && ISTILED(fc))
break;
}
// 间隙参数处理
int32_t cur_gappiv = enablegaps ? m->gappiv : 0; // 内部垂直间隙
int32_t cur_gappih = enablegaps ? m->gappih : 0; // 内部水平间隙
int32_t cur_gappov = enablegaps ? m->gappov : 0; // 外部垂直间隙
int32_t cur_gappoh = enablegaps ? m->gappoh : 0; // 外部水平间隙
int32_t cur_gappiv = server.enablegaps ? m->gappiv : 0; // 内部垂直间隙
int32_t cur_gappih = server.enablegaps ? m->gappih : 0; // 内部水平间隙
int32_t cur_gappov = server.enablegaps ? m->gappov : 0; // 外部垂直间隙
int32_t cur_gappoh = server.enablegaps ? m->gappoh : 0; // 外部水平间隙
// 智能间隙处理
cur_gappiv = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gappiv;
@ -540,7 +540,7 @@ void center_tile(Monitor *m) {
ety = cur_gappov;
i = 0;
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (!VISIBLEON(c, m) || !ISTILED(c))
continue;
@ -676,7 +676,7 @@ void center_tile(Monitor *m) {
}
void tile(Monitor *m) {
int32_t i, n = 0, h, r, ie = enablegaps, mw, my, ty;
int32_t i, n = 0, h, r, ie = server.enablegaps, mw, my, ty;
Client *c = NULL;
Client *fc = NULL;
double mfact = 0;
@ -691,17 +691,17 @@ void tile(Monitor *m) {
if (n == 0)
return;
int32_t cur_gappiv = enablegaps ? m->gappiv : 0;
int32_t cur_gappih = enablegaps ? m->gappih : 0;
int32_t cur_gappov = enablegaps ? m->gappov : 0;
int32_t cur_gappoh = enablegaps ? m->gappoh : 0;
int32_t cur_gappiv = server.enablegaps ? m->gappiv : 0;
int32_t cur_gappih = server.enablegaps ? m->gappih : 0;
int32_t cur_gappov = server.enablegaps ? m->gappov : 0;
int32_t cur_gappoh = server.enablegaps ? m->gappoh : 0;
cur_gappiv = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gappiv;
cur_gappih = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gappih;
cur_gappov = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gappov;
cur_gappoh = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gappoh;
wl_list_for_each(fc, &clients, link) {
wl_list_for_each(fc, &server.clients, link) {
if (VISIBLEON(fc, m) && ISTILED(fc))
break;
@ -727,7 +727,7 @@ void tile(Monitor *m) {
(m->w.height - 2 * cur_gappov - cur_gappiv * ie * (stack_num - 1));
float slave_surplus_ratio = 1.0;
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (!VISIBLEON(c, m) || !ISTILED(c))
continue;
if (i < m->pertag->nmasters[m->pertag->curtag]) {
@ -786,7 +786,7 @@ void tile(Monitor *m) {
}
void right_tile(Monitor *m) {
int32_t i, n = 0, h, r, ie = enablegaps, mw, my, ty;
int32_t i, n = 0, h, r, ie = server.enablegaps, mw, my, ty;
Client *c = NULL;
Client *fc = NULL;
double mfact = 0;
@ -801,17 +801,17 @@ void right_tile(Monitor *m) {
if (n == 0)
return;
int32_t cur_gappiv = enablegaps ? m->gappiv : 0;
int32_t cur_gappih = enablegaps ? m->gappih : 0;
int32_t cur_gappov = enablegaps ? m->gappov : 0;
int32_t cur_gappoh = enablegaps ? m->gappoh : 0;
int32_t cur_gappiv = server.enablegaps ? m->gappiv : 0;
int32_t cur_gappih = server.enablegaps ? m->gappih : 0;
int32_t cur_gappov = server.enablegaps ? m->gappov : 0;
int32_t cur_gappoh = server.enablegaps ? m->gappoh : 0;
cur_gappiv = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gappiv;
cur_gappih = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gappih;
cur_gappov = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gappov;
cur_gappoh = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gappoh;
wl_list_for_each(fc, &clients, link) {
wl_list_for_each(fc, &server.clients, link) {
if (VISIBLEON(fc, m) && ISTILED(fc))
break;
@ -837,7 +837,7 @@ void right_tile(Monitor *m) {
(m->w.height - 2 * cur_gappov - cur_gappiv * ie * (stack_num - 1));
float slave_surplus_ratio = 1.0;
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (!VISIBLEON(c, m) || !ISTILED(c))
continue;
if (i < m->pertag->nmasters[m->pertag->curtag]) {
@ -901,13 +901,13 @@ monocle(Monitor *m) {
Client *c = NULL;
struct wlr_box geom;
int32_t cur_gappov = enablegaps ? m->gappov : 0;
int32_t cur_gappoh = enablegaps ? m->gappoh : 0;
int32_t cur_gappov = server.enablegaps ? m->gappov : 0;
int32_t cur_gappoh = server.enablegaps ? m->gappoh : 0;
cur_gappoh = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gappoh;
cur_gappov = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gappov;
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (!VISIBLEON(c, m) || !ISTILED(c))
continue;
geom.x = m->w.x + cur_gappoh;

View file

@ -1,5 +1,5 @@
void vertical_tile(Monitor *m) {
int32_t i, n = 0, w, r, ie = enablegaps, mh, mx, tx;
int32_t i, n = 0, w, r, ie = server.enablegaps, mh, mx, tx;
Client *c = NULL;
Client *fc = NULL;
double mfact = 0;
@ -14,17 +14,17 @@ void vertical_tile(Monitor *m) {
if (n == 0)
return;
int32_t cur_gapih = enablegaps ? m->gappih : 0;
int32_t cur_gapiv = enablegaps ? m->gappiv : 0;
int32_t cur_gapoh = enablegaps ? m->gappoh : 0;
int32_t cur_gapov = enablegaps ? m->gappov : 0;
int32_t cur_gapih = server.enablegaps ? m->gappih : 0;
int32_t cur_gapiv = server.enablegaps ? m->gappiv : 0;
int32_t cur_gapoh = server.enablegaps ? m->gappoh : 0;
int32_t cur_gapov = server.enablegaps ? m->gappov : 0;
cur_gapih = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gapih;
cur_gapiv = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gapiv;
cur_gapoh = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gapoh;
cur_gapov = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gapov;
wl_list_for_each(fc, &clients, link) {
wl_list_for_each(fc, &server.clients, link) {
if (VISIBLEON(fc, m) && ISTILED(fc))
break;
}
@ -50,7 +50,7 @@ void vertical_tile(Monitor *m) {
(m->w.width - 2 * cur_gapoh - cur_gapih * ie * (stack_num - 1));
float slave_surplus_ratio = 1.0;
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (!VISIBLEON(c, m) || !ISTILED(c))
continue;
if (i < m->pertag->nmasters[m->pertag->curtag]) {
@ -112,9 +112,9 @@ void vertical_deck(Monitor *m) {
float mfact;
uint32_t nmasters = m->pertag->nmasters[m->pertag->curtag];
int32_t cur_gappiv = enablegaps ? m->gappiv : 0;
int32_t cur_gappoh = enablegaps ? m->gappoh : 0;
int32_t cur_gappov = enablegaps ? m->gappov : 0;
int32_t cur_gappiv = server.enablegaps ? m->gappiv : 0;
int32_t cur_gappoh = server.enablegaps ? m->gappoh : 0;
int32_t cur_gappov = server.enablegaps ? m->gappov : 0;
cur_gappiv = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gappiv;
cur_gappoh = smartgaps && m->visible_tiling_clients == 1 ? 0 : cur_gappoh;
@ -125,7 +125,7 @@ void vertical_deck(Monitor *m) {
if (n == 0)
return;
wl_list_for_each(fc, &clients, link) {
wl_list_for_each(fc, &server.clients, link) {
if (VISIBLEON(fc, m) && ISTILED(fc))
break;
@ -141,7 +141,7 @@ void vertical_deck(Monitor *m) {
mh = m->w.height - 2 * cur_gappov;
i = mx = 0;
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (!VISIBLEON(c, m) || !ISTILED(c))
continue;
if (i < nmasters) {
@ -171,9 +171,9 @@ void vertical_deck(Monitor *m) {
void vertical_scroll_adjust_fullandmax(Client *c, struct wlr_box *target_geom) {
Monitor *m = c->mon;
int32_t cur_gappiv = enablegaps ? m->gappiv : 0;
int32_t cur_gappov = enablegaps ? m->gappov : 0;
int32_t cur_gappoh = enablegaps ? m->gappoh : 0;
int32_t cur_gappiv = server.enablegaps ? m->gappiv : 0;
int32_t cur_gappov = server.enablegaps ? m->gappov : 0;
int32_t cur_gappoh = server.enablegaps ? m->gappoh : 0;
cur_gappiv =
smartgaps && m->visible_scroll_tiling_clients == 1 ? 0 : cur_gappiv;
@ -270,10 +270,10 @@ void vertical_scroller(Monitor *m) {
struct wlr_box target_geom;
int32_t focus_client_index = 0;
bool need_scroller = false;
int32_t cur_gappiv = enablegaps ? m->gappiv : 0;
int32_t cur_gappov = enablegaps ? m->gappov : 0;
int32_t cur_gappoh = enablegaps ? m->gappoh : 0;
int32_t cur_gappih = enablegaps ? m->gappih : 0;
int32_t cur_gappiv = server.enablegaps ? m->gappiv : 0;
int32_t cur_gappov = server.enablegaps ? m->gappov : 0;
int32_t cur_gappoh = server.enablegaps ? m->gappoh : 0;
int32_t cur_gappih = server.enablegaps ? m->gappih : 0;
cur_gappiv =
smartgaps && m->visible_scroll_tiling_clients == 1 ? 0 : cur_gappiv;
@ -296,7 +296,7 @@ void vertical_scroller(Monitor *m) {
}
j = 0;
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (VISIBLEON(c, m) && ISSCROLLTILED(c) && !c->prev_in_stack) {
tempClients[j] = c;
j++;
@ -359,7 +359,7 @@ void vertical_scroller(Monitor *m) {
need_scroller = true;
}
if (start_drag_window)
if (server.start_drag_window)
need_scroller = false;
target_geom.width = m->w.width - 2 * cur_gappoh;
@ -439,9 +439,9 @@ void vertical_grid(Monitor *m) {
int32_t rows, cols, overrows;
Client *c = NULL;
int32_t target_gappo =
enablegaps ? m->isoverview ? overviewgappo : gappov : 0;
server.enablegaps ? m->isoverview ? overviewgappo : gappov : 0;
int32_t target_gappi =
enablegaps ? m->isoverview ? overviewgappi : gappiv : 0;
server.enablegaps ? m->isoverview ? overviewgappi : gappiv : 0;
float single_width_ratio = m->isoverview ? 0.7 : 0.9;
float single_height_ratio = m->isoverview ? 0.8 : 0.9;
@ -452,7 +452,7 @@ void vertical_grid(Monitor *m) {
}
if (n == 1) {
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (c->mon != m)
continue;
@ -475,7 +475,7 @@ void vertical_grid(Monitor *m) {
ch = (m->w.height - 2 * target_gappo - target_gappi) / 2;
cw = (m->w.width - 2 * target_gappo) * 0.65;
i = 0;
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (c->mon != m)
continue;
@ -518,7 +518,7 @@ void vertical_grid(Monitor *m) {
}
i = 0;
wl_list_for_each(c, &clients, link) {
wl_list_for_each(c, &server.clients, link) {
if (c->mon != m)
continue;

File diff suppressed because it is too large Load diff