From: John Lindgren Date: Thu, 16 Feb 2023 21:30:38 +0000 (-0500) Subject: view: Factor out set_fullscreen() helper from view_set_fullscreen() X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=1f80cda061ee2963f8db8f8b0cf9b35397d48614;p=proto%2Flabwc.git view: Factor out set_fullscreen() helper from view_set_fullscreen() --- diff --git a/src/view.c b/src/view.c index e4ee48c3..7ac4ea2c 100644 --- a/src/view.c +++ b/src/view.c @@ -499,6 +499,7 @@ view_apply_special_geometry(struct view *view) return true; } +/* For internal use only. Does not update geometry. */ static void set_maximized(struct view *view, bool maximized) { @@ -671,20 +672,15 @@ view_toggle_fullscreen(struct view *view) view_set_fullscreen(view, !view->fullscreen, NULL); } -void -view_set_fullscreen(struct view *view, bool fullscreen, struct output *output) +/* For internal use only. Does not update geometry. */ +static void +set_fullscreen(struct view *view, bool fullscreen) { - assert(view); - if (fullscreen == view->fullscreen) { - return; - } - if (fullscreen && !output_is_usable(output)) { - output = view_output(view); - if (!output_is_usable(output)) { - /* Prevent fullscreen with no available outputs */ - return; - } + /* Hide decorations when going fullscreen */ + if (fullscreen && view->ssd_enabled) { + undecorate(view); } + if (view->impl->set_fullscreen) { view->impl->set_fullscreen(view, fullscreen); } @@ -692,7 +688,36 @@ view_set_fullscreen(struct view *view, bool fullscreen, struct output *output) wlr_foreign_toplevel_handle_v1_set_fullscreen( view->toplevel.handle, fullscreen); } + view->fullscreen = fullscreen; + + /* Re-show decorations when no longer fullscreen */ + if (!fullscreen && view->ssd_enabled) { + decorate(view); + } + + /* Show fullscreen views above top-layer */ + if (view->output) { + uint32_t top = ZWLR_LAYER_SHELL_V1_LAYER_TOP; + wlr_scene_node_set_enabled(&view->output->layer_tree[top]->node, + !fullscreen); + } +} + +void +view_set_fullscreen(struct view *view, bool fullscreen, struct output *output) +{ + assert(view); + if (fullscreen == view->fullscreen) { + return; + } if (fullscreen) { + if (!output_is_usable(output)) { + output = view_output(view); + if (!output_is_usable(output)) { + /* Prevent fullscreen with no available outputs */ + return; + } + } /* * Fullscreen via keybind or client request cancels * interactive move/resize since we can't move/resize @@ -700,32 +725,18 @@ view_set_fullscreen(struct view *view, bool fullscreen, struct output *output) */ interactive_cancel(view); view_store_natural_geometry(view); - - /* Hide decorations when going fullscreen */ - if (view->ssd_enabled) { - undecorate(view); - } - view->fullscreen = true; view->output = output; + } + + set_fullscreen(view, fullscreen); + if (fullscreen) { view_apply_fullscreen_geometry(view); } else { - view->fullscreen = false; - /* Re-show decorations when no longer fullscreen */ - if (view->ssd_enabled) { - decorate(view); - } /* Restore non-fullscreen geometry */ if (!view_apply_special_geometry(view)) { view_apply_natural_geometry(view); } } - - /* Show fullscreen views above top-layer */ - if (view->output) { - uint32_t top = ZWLR_LAYER_SHELL_V1_LAYER_TOP; - wlr_scene_node_set_enabled(&view->output->layer_tree[top]->node, - !fullscreen); - } } void