diff --git a/src/backend/wayland/wl_xdg.c b/src/backend/wayland/wl_xdg.c index cabd0e6..173ed30 100644 --- a/src/backend/wayland/wl_xdg.c +++ b/src/backend/wayland/wl_xdg.c @@ -402,7 +402,15 @@ handle_toplevel_unmap(struct wl_listener *listener, void *data) WObjDescriptor *desc = wm_backend->context_find(view->id, WM_CTX_CLIENT_WIN); if (desc && desc->parent_type == WCLASS_WINDOW) { WWindow *wwin = (WWindow *)desc->parent; + WNativeWindow main_win = wwin->main_window; wwin->flags.destroyed = 1; + /* Destroy app BEFORE unmanage so wApplicationDestroy can + * still access main_window_desc (which unmanage frees). */ + WApplication *app = wApplicationOf(main_win); + if (app) { + app->refcount = 0; + wApplicationDestroy(app); + } wUnmanageWindow(wwin, False, True); } }