]> git.mdlowis.com Git - proto/labwc.git/commitdiff
view: Handle maximized view on disabled output more simply
authorJohn Lindgren <john@jlindgren.net>
Sat, 8 Jan 2022 16:46:46 +0000 (11:46 -0500)
committerJohan Malm <johanmalm@users.noreply.github.com>
Sat, 8 Jan 2022 17:23:57 +0000 (17:23 +0000)
Partially reverts commit ab07b68d7e888211e9ef5a3731f5272912d4b878.

src/view.c

index 3caaddabf54aa026dcabcdd27edd52cf3e40bad3..5587b1dce34ce5d79ec20e866b1da853374616b5 100644 (file)
@@ -165,9 +165,15 @@ view_apply_fullscreen_geometry(struct view *view, struct wlr_output *wlr_output)
 static void
 view_apply_maximized_geometry(struct view *view)
 {
+       /*
+        * The same code handles both initial maximize and re-maximize
+        * to account for layout changes.  In either case, view_output()
+        * gives the output closest to the current geometry (which may
+        * be different from the output originally maximized onto).
+        * view_output() can return NULL if all outputs are disabled.
+        */
        struct output *output = view_output(view);
        if (!output) {
-               wlr_log(WLR_ERROR, "view %p has no output", view);
                return;
        }
        struct wlr_box box = output_usable_area_in_layout_coords(output);
@@ -319,26 +325,19 @@ view_adjust_for_layout_change(struct view *view)
                if (wlr_output_layout_get(layout, view->fullscreen)) {
                        /* recompute fullscreen geometry */
                        view_apply_fullscreen_geometry(view, view->fullscreen);
-                       return;
                } else {
                        /* output is gone, exit fullscreen */
                        view_set_fullscreen(view, false, NULL);
                }
-       }
-
-       bool was_maximized = view->maximized;
-       if (was_maximized) {
-               view_maximize(view, false);
-       }
-
-       /* reposition view if it's offscreen */
-       struct wlr_box box = { view->x, view->y, view->w, view->h };
-       if (!wlr_output_layout_intersects(layout, NULL, &box)) {
-               view_center(view);
-       }
-
-       if (was_maximized) {
-               view_maximize(view, true);
+       } else if (view->maximized) {
+               /* recompute maximized geometry */
+               view_apply_maximized_geometry(view);
+       } else {
+               /* reposition view if it's offscreen */
+               struct wlr_box box = { view->x, view->y, view->w, view->h };
+               if (!wlr_output_layout_intersects(layout, NULL, &box)) {
+                       view_center(view);
+               }
        }
 }