view: unify ssd_enabled and ssd_titlebar_hidden to ssd_mode

This commit is contained in:
tokyo4j 2025-08-21 13:45:58 +09:00 committed by Johan Malm
parent 48ba23fc8d
commit 943f5751ee
4 changed files with 29 additions and 39 deletions

View file

@ -36,10 +36,10 @@ enum lab_rotation {
};
enum lab_ssd_mode {
LAB_SSD_MODE_INVALID,
LAB_SSD_MODE_NONE,
LAB_SSD_MODE_NONE = 0,
LAB_SSD_MODE_BORDER,
LAB_SSD_MODE_FULL,
LAB_SSD_MODE_INVALID,
};
enum lab_tristate {

View file

@ -170,8 +170,7 @@ struct view {
bool mapped;
bool been_mapped;
bool ssd_enabled;
bool ssd_titlebar_hidden;
enum lab_ssd_mode ssd_mode;
enum ssd_preference ssd_preference;
bool shaded;
bool minimized;
@ -534,7 +533,7 @@ bool view_is_tiled(struct view *view);
bool view_is_tiled_and_notify_tiled(struct view *view);
bool view_is_floating(struct view *view);
void view_move_to_workspace(struct view *view, struct workspace *workspace);
enum lab_ssd_mode view_get_ssd_mode(struct view *view);
bool view_titlebar_visible(struct view *view);
void view_set_ssd_mode(struct view *view, enum lab_ssd_mode mode);
void view_set_decorations(struct view *view, enum lab_ssd_mode mode, bool force_ssd);
void view_toggle_fullscreen(struct view *view);

View file

@ -32,7 +32,7 @@ ssd_thickness(struct view *view)
* in border-only deco mode as view->ssd would only be set
* after ssd_create() returns.
*/
if (!view->ssd_enabled || view->fullscreen) {
if (!view->ssd_mode || view->fullscreen) {
return (struct border){ 0 };
}
@ -40,7 +40,7 @@ ssd_thickness(struct view *view)
if (view->maximized == VIEW_AXIS_BOTH) {
struct border thickness = { 0 };
if (!view->ssd_titlebar_hidden) {
if (view_titlebar_visible(view)) {
thickness.top += theme->titlebar_height;
}
return thickness;
@ -53,7 +53,7 @@ ssd_thickness(struct view *view)
.left = theme->border_width,
};
if (view->ssd_titlebar_hidden) {
if (!view_titlebar_visible(view)) {
thickness.top -= theme->titlebar_height;
}
return thickness;
@ -89,14 +89,14 @@ static enum ssd_part_type
get_resizing_type(const struct ssd *ssd, struct wlr_cursor *cursor)
{
struct view *view = ssd ? ssd->view : NULL;
if (!view || !cursor || !view->ssd_enabled || view->fullscreen) {
if (!view || !cursor || !view->ssd_mode || view->fullscreen) {
return LAB_SSD_NONE;
}
struct wlr_box view_box = view->current;
view_box.height = view_effective_height(view, /* use_pending */ false);
if (!view->ssd_titlebar_hidden) {
if (view_titlebar_visible(view)) {
/* If the titlebar is visible, consider it part of the view */
int titlebar_height = view->server->theme->titlebar_height;
view_box.y -= titlebar_height;
@ -250,7 +250,7 @@ ssd_create(struct view *view, bool active)
*/
ssd_titlebar_create(ssd);
ssd_border_create(ssd);
if (view->ssd_titlebar_hidden) {
if (!view_titlebar_visible(view)) {
/* Ensure we keep the old state on Reconfigure or when exiting fullscreen */
ssd_set_titlebar(ssd, false);
}

View file

@ -80,6 +80,7 @@ view_query_create(void)
struct view_query *query = znew(*query);
query->window_type = -1;
query->maximized = VIEW_AXIS_INVALID;
query->decoration = LAB_SSD_MODE_INVALID;
return query;
}
@ -206,8 +207,8 @@ view_matches_query(struct view *view, struct view_query *query)
}
}
enum lab_ssd_mode decor = view_get_ssd_mode(view);
if (query->decoration != LAB_SSD_MODE_INVALID && query->decoration != decor) {
if (query->decoration != LAB_SSD_MODE_INVALID
&& query->decoration != view->ssd_mode) {
return false;
}
@ -1316,7 +1317,7 @@ view_apply_maximized_geometry(struct view *view)
&natural.x, &natural.y);
}
if (view->ssd_enabled) {
if (view->ssd_mode) {
struct border border = ssd_thickness(view);
box.x += border.left;
box.y += border.top;
@ -1557,7 +1558,7 @@ view_set_decorations(struct view *view, enum lab_ssd_mode mode, bool force_ssd)
assert(view);
if (force_ssd || view_wants_decorations(view)
|| mode < view_get_ssd_mode(view)) {
|| mode < view->ssd_mode) {
view_set_ssd_mode(view, mode);
}
}
@ -1567,10 +1568,9 @@ view_toggle_decorations(struct view *view)
{
assert(view);
enum lab_ssd_mode mode = view_get_ssd_mode(view);
if (rc.ssd_keep_border && mode == LAB_SSD_MODE_FULL) {
if (rc.ssd_keep_border && view->ssd_mode == LAB_SSD_MODE_FULL) {
view_set_ssd_mode(view, LAB_SSD_MODE_BORDER);
} else if (mode != LAB_SSD_MODE_NONE) {
} else if (view->ssd_mode != LAB_SSD_MODE_NONE) {
view_set_ssd_mode(view, LAB_SSD_MODE_NONE);
} else {
view_set_ssd_mode(view, LAB_SSD_MODE_FULL);
@ -1657,18 +1657,10 @@ undecorate(struct view *view)
view->ssd = NULL;
}
enum lab_ssd_mode
view_get_ssd_mode(struct view *view)
bool
view_titlebar_visible(struct view *view)
{
assert(view);
if (!view->ssd_enabled) {
return LAB_SSD_MODE_NONE;
} else if (view->ssd_titlebar_hidden) {
return LAB_SSD_MODE_BORDER;
} else {
return LAB_SSD_MODE_FULL;
}
return view->ssd_mode == LAB_SSD_MODE_FULL;
}
void
@ -1677,7 +1669,7 @@ view_set_ssd_mode(struct view *view, enum lab_ssd_mode mode)
assert(view);
if (view->shaded || view->fullscreen
|| mode == view_get_ssd_mode(view)) {
|| mode == view->ssd_mode) {
return;
}
@ -1685,12 +1677,11 @@ view_set_ssd_mode(struct view *view, enum lab_ssd_mode mode)
* Set these first since they are referenced
* within the call tree of ssd_create() and ssd_thickness()
*/
view->ssd_enabled = mode != LAB_SSD_MODE_NONE;
view->ssd_titlebar_hidden = mode != LAB_SSD_MODE_FULL;
view->ssd_mode = mode;
if (view->ssd_enabled) {
if (mode) {
decorate(view);
ssd_set_titlebar(view->ssd, !view->ssd_titlebar_hidden);
ssd_set_titlebar(view->ssd, view_titlebar_visible(view));
} else {
undecorate(view);
}
@ -1718,7 +1709,7 @@ set_fullscreen(struct view *view, bool fullscreen)
}
/* Hide decorations when going fullscreen */
if (fullscreen && view->ssd_enabled) {
if (fullscreen && view->ssd_mode) {
undecorate(view);
}
@ -1730,7 +1721,7 @@ set_fullscreen(struct view *view, bool fullscreen)
wl_signal_emit_mutable(&view->events.fullscreened, NULL);
/* Re-show decorations when no longer fullscreen */
if (!fullscreen && view->ssd_enabled) {
if (!fullscreen && view->ssd_mode) {
decorate(view);
}
@ -2393,7 +2384,7 @@ void
view_reload_ssd(struct view *view)
{
assert(view);
if (view->ssd_enabled && !view->fullscreen) {
if (view->ssd_mode && !view->fullscreen) {
undecorate(view);
decorate(view);
}
@ -2416,7 +2407,7 @@ view_toggle_keybinds(struct view *view)
assert(view);
view->inhibits_keybinds = !view->inhibits_keybinds;
if (view->ssd_enabled) {
if (view->ssd_mode) {
ssd_enable_keybind_inhibit_indicator(view->ssd,
view->inhibits_keybinds);
}
@ -2498,7 +2489,7 @@ view_set_shade(struct view *view, bool shaded)
}
/* Views without a title-bar or SSD cannot be shaded */
if (shaded && (!view->ssd || view->ssd_titlebar_hidden)) {
if (shaded && (!view->ssd || !view_titlebar_visible(view))) {
return;
}