]> git.mdlowis.com Git - proto/labwc.git/commitdiff
view: Factor out set_fullscreen() helper from view_set_fullscreen()
authorJohn Lindgren <john@jlindgren.net>
Thu, 16 Feb 2023 21:30:38 +0000 (16:30 -0500)
committerJohn Lindgren <john@jlindgren.net>
Mon, 20 Feb 2023 18:45:40 +0000 (13:45 -0500)
src/view.c

index e4ee48c3a3a4aebc6bbc2079b13618ff9f73f4ac..7ac4ea2ce9f408356d733fc1367775453541c35f 100644 (file)
@@ -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