shell: Don't start a fade animation if we don't have an output
When the last window of the X11 compositor is closed during a fade or
while locked, we'll try to start a fade back to the lock screen. However,
if we closed the last window, there are no outputs left and the animation
will try to run with surface->output == NULL.
https://bugs.freedesktop.org/show_bug.cgi?id=73665
diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index 71610cc..c27ccc7 100644
--- a/desktop-shell/shell.c
+++ b/desktop-shell/shell.c
@@ -4412,13 +4412,22 @@
weston_view_update_transform(shell->fade.view);
}
- if (shell->fade.animation)
+ if (shell->fade.view->output == NULL) {
+ /* If the black view gets a NULL output, we lost the
+ * last output and we'll just cancel the fade. This
+ * happens when you close the last window under the
+ * X11 or Wayland backends. */
+ shell->locked = false;
+ weston_surface_destroy(shell->fade.view->surface);
+ shell->fade.view = NULL;
+ } else if (shell->fade.animation) {
weston_fade_update(shell->fade.animation, tint);
- else
+ } else {
shell->fade.animation =
weston_fade_run(shell->fade.view,
1.0 - tint, tint, 300.0,
shell_fade_done, shell);
+ }
}
static void