refactor(window): 用更通用的尺寸提示(min/max size)替换 fixed_size 标记

This commit is contained in:
2026-06-22 23:22:08 +08:00
parent 9a1e015fc1
commit b71b66921e
12 changed files with 161 additions and 107 deletions

View File

@@ -49,7 +49,7 @@ void window_set_minimized(window_t *window, bool minimized) {
}
void window_set_floating(window_t *window, bool floating) {
if (!floating && (window->fixed_size || window->sticky)) return;
if (!floating && (window_should_fix_size(window) || window->sticky)) return;
if (floating == window->floating) return;
@@ -67,11 +67,6 @@ void window_set_urgent(window_t *window, bool urgent) {
window->urgent = urgent;
}
void window_set_fixed_size(window_t *window, bool fixed_size) {
window->fixed_size = fixed_size;
if (fixed_size) window_set_floating(window, true);
}
void window_set_skip_taskbar(window_t *window, bool skip_taskbar) {
window->skip_taskbar = skip_taskbar;
}
@@ -84,6 +79,18 @@ void window_set_frame_rect(window_t *window, rect_t rect) {
window->frame_rect = rect;
}
void window_set_size_hint(window_t *window, zdwm_size_t min, zdwm_size_t max) {
window->min_size = min;
window->max_size = max;
if (!window_should_fix_size(window)) return;
auto rect = window->frame_rect;
rect.width = min.width;
rect.height = min.height;
window_set_frame_rect(window, rect);
window_set_floating(window, true);
}
void window_set_title(window_t *window, const char *title) {
p_delete(&window->title);
window->title = p_strdup_nullable(title);
@@ -158,3 +165,9 @@ bool window_should_has_border(const window_t *window) {
if (window->fullscreen || window->maximized) return false;
return window->floating;
}
bool window_should_fix_size(const window_t *window) {
auto max = window->max_size;
auto min = window->min_size;
return max.width == min.width && max.height == min.height;
}