From 6d2140c4b737f643b22164b4fff21af499a1aded Mon Sep 17 00:00:00 2001 From: John Lindgren Date: Mon, 1 Sep 2025 11:49:24 -0400 Subject: [PATCH] view: expose view_set_maximized() instead of view_restore_to() view_restore_to() (which is just set_maximized() + view_move_resize()) hasn't aged well and doesn't line up with typical usage anymore: - it's missing view_set_untiled(), which has to be called separately - it always forces view_move_resize() even when that's not needed - it doesn't allow un-maximizing only one axis (see next commit) - the fullscreen check is unnecessary (already checked in callers) Eliminate it and just expose view_set_maximized() instead. No functional change intended in this commit. --- include/view.h | 2 +- src/input/cursor.c | 3 ++- src/interactive.c | 5 +++-- src/view.c | 37 ++++++++++++++----------------------- 4 files changed, 20 insertions(+), 27 deletions(-) diff --git a/include/view.h b/include/view.h index 97fb2343..5ff70984 100644 --- a/include/view.h +++ b/include/view.h @@ -518,7 +518,7 @@ void view_place_by_policy(struct view *view, bool allow_cursor, enum lab_placement_policy policy); void view_constrain_size_to_that_of_usable_area(struct view *view); -void view_restore_to(struct view *view, struct wlr_box geometry); +void view_set_maximized(struct view *view, enum view_axis maximized); void view_set_untiled(struct view *view); void view_maximize(struct view *view, enum view_axis axis, bool store_natural_geometry); diff --git a/src/input/cursor.c b/src/input/cursor.c index 4c6b353e..a051092f 100644 --- a/src/input/cursor.c +++ b/src/input/cursor.c @@ -291,8 +291,9 @@ process_cursor_move(struct server *server, uint32_t time) interactive_anchor_to_cursor(server, &new_geo); /* Shaded clients will not process resize events until unshaded */ view_set_shade(view, false); + view_set_maximized(view, VIEW_AXIS_NONE); view_set_untiled(view); - view_restore_to(view, new_geo); + view_move_resize(view, new_geo); x = new_geo.x; y = new_geo.y; } diff --git a/src/interactive.c b/src/interactive.c index f0c30e75..adc06b8c 100644 --- a/src/interactive.c +++ b/src/interactive.c @@ -122,8 +122,8 @@ interactive_begin(struct view *view, enum input_mode mode, enum lab_edge edges) * maximized/tiled state but keep the same geometry as * the starting point for the resize. */ + view_set_maximized(view, VIEW_AXIS_NONE); view_set_untiled(view); - view_restore_to(view, view->pending); cursor_shape = cursor_get_from_edge(edges); break; default: @@ -153,8 +153,9 @@ interactive_begin(struct view *view, enum input_mode mode, enum lab_edge edges) interactive_anchor_to_cursor(server, &natural_geo); /* Shaded clients will not process resize events until unshaded */ view_set_shade(view, false); + view_set_maximized(view, VIEW_AXIS_NONE); view_set_untiled(view); - view_restore_to(view, natural_geo); + view_move_resize(view, natural_geo); } if (rc.resize_indicator) { diff --git a/src/view.c b/src/view.c index 54eb6039..1bc205e0 100644 --- a/src/view.c +++ b/src/view.c @@ -660,7 +660,7 @@ view_move_relative(struct view *view, int x, int y) view_maximize(view, VIEW_AXIS_NONE, /*store_natural_geometry*/ false); if (view_is_tiled(view)) { view_set_untiled(view); - view_restore_to(view, view->natural_geometry); + view_move_resize(view, view->natural_geometry); } view_move(view, view->pending.x + x, view->pending.y + y); } @@ -678,7 +678,7 @@ view_move_to_cursor(struct view *view) view_maximize(view, VIEW_AXIS_NONE, /*store_natural_geometry*/ false); if (view_is_tiled(view)) { view_set_untiled(view); - view_restore_to(view, view->natural_geometry); + view_move_resize(view, view->natural_geometry); } struct border margin = ssd_thickness(view); @@ -1367,10 +1367,18 @@ view_apply_special_geometry(struct view *view) } } -/* For internal use only. Does not update geometry. */ -static void -set_maximized(struct view *view, enum view_axis maximized) +/* + * Sets maximized state without updating geometry. Used in interactive + * move/resize. In most other cases, use view_maximize() instead. + */ +void +view_set_maximized(struct view *view, enum view_axis maximized) { + assert(view); + if (view->maximized == maximized) { + return; + } + if (view->impl->maximize) { view->impl->maximize(view, maximized); } @@ -1386,23 +1394,6 @@ set_maximized(struct view *view, enum view_axis maximized) ssd_update_margin(view->ssd); } -/* - * Un-maximize view and move it to specific geometry. Does not reset - * tiled state (use view_set_untiled() if you want that). - */ -void -view_restore_to(struct view *view, struct wlr_box geometry) -{ - assert(view); - if (view->fullscreen) { - return; - } - if (view->maximized != VIEW_AXIS_NONE) { - set_maximized(view, VIEW_AXIS_NONE); - } - view_move_resize(view, geometry); -} - bool view_is_tiled(struct view *view) { @@ -1505,7 +1496,7 @@ view_maximize(struct view *view, enum view_axis axis, view->natural_geometry = view_get_fallback_natural_geometry(view); } - set_maximized(view, axis); + view_set_maximized(view, axis); if (view_is_floating(view)) { view_apply_natural_geometry(view); } else { -- 2.52.0