From: Tim Clem <tclem@codeweavers.com> We already handle invalid windows at QUERYENDSESSION time in macdrv_app_quit_request, but some apps (e.g. the EA launcher) close windows in response to QUERYENDSESSION, and we shouldn't abort quitting in that case. --- dlls/winemac.drv/dllmain.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/dlls/winemac.drv/dllmain.c b/dlls/winemac.drv/dllmain.c index eb6efedab17..bbd528d53b9 100644 --- a/dlls/winemac.drv/dllmain.c +++ b/dlls/winemac.drv/dllmain.c @@ -141,9 +141,15 @@ static void CALLBACK quit_callback(HWND hwnd, UINT msg, ULONG_PTR data, LRESULT if (!SendMessageCallbackW(qi->wins[i], WM_ENDSESSION, qi->result, qi->flags, quit_callback, (ULONG_PTR)qi)) { - WARN("failed to send WM_ENDSESSION to win %p; error 0x%08lx\n", - qi->wins[i], RtlGetLastWin32Error()); - quit_callback(qi->wins[i], WM_ENDSESSION, (ULONG_PTR)qi, 0); + DWORD error = RtlGetLastWin32Error(); + BOOL invalid = (error == ERROR_INVALID_WINDOW_HANDLE); + if (invalid) + TRACE("failed to send WM_ENDSESSION to win %p because it's invalid; assuming success\n", + qi->wins[i]); + else + WARN("failed to send WM_ENDSESSION to win %p; error 0x%08lx; assuming refusal\n", + qi->wins[i], error); + quit_callback(qi->wins[i], WM_ENDSESSION, (ULONG_PTR)qi, invalid); } } } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10627