From 8edaa54faf07f6ba17b65000639a5f66dde1f5dd Mon Sep 17 00:00:00 2001 From: Matthew Bauer Date: Sun, 15 Mar 2020 17:30:58 -0400 Subject: [PATCH] =?UTF-8?q?Don=E2=80=99t=20terminate=20display=20when=20no?= =?UTF-8?q?=20view=20is=20found?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some apps like RetroArch will quit and fork itself to switch modes (like from the menu to a loaded core). This means that for a very short period of time we have no view available for Wayland. Right now, Cage doesn’t actually exit when it does this terminate, so you get this kind of zombie child process that is running but not showing anything on the screen because there is no compositor. The solution I have here is to just keep Cage’s Wayland server running to avoid this issue. I’m open to other idea, but this seems sane to me. Perhaps an alternative is to check if the process is still alive when this happens, if not then we can do the quitting behavior. In addition, we could make this an option if some users don’t want this behavior. --- view.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/view.c b/view.c index 5f9bed0..fff3d05 100644 --- a/view.c +++ b/view.c @@ -258,14 +258,6 @@ void view_destroy(struct cg_view *view) { struct cg_server *server = view->server; - bool ever_been_mapped = true; - -#if CAGE_HAS_XWAYLAND - if (view->type == CAGE_XWAYLAND_VIEW) { - struct cg_xwayland_view *xwayland_view = xwayland_view_from_view(view); - ever_been_mapped = xwayland_view->ever_been_mapped; - } -#endif if (view->wlr_surface != NULL) { view_unmap(view); @@ -278,10 +270,6 @@ view_destroy(struct cg_view *view) if (!empty) { struct cg_view *prev = wl_container_of(server->views.next, prev, link); seat_set_focus(server->seat, prev); - } else if (ever_been_mapped) { - /* The list is empty and the last view has been - mapped, so we can safely exit. */ - wl_display_terminate(server->wl_display); } }