mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2026-03-05 01:40:57 -05:00
project: not use global var
This commit is contained in:
parent
0b35b00f91
commit
21a492e961
17 changed files with 1885 additions and 1599 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
1903
src/mango.c
1903
src/mango.c
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue