Alexandre Julliard wrote:
Richard Cohen richard@daijobu.co.uk writes:
Closing Win16 programs using the Window manager doesn't work any more, because 16 bit programs don't recognize the WINE internal messages, so they don't get processed.
This should be fixed now.
Almost. In PeekMessageW, the message should be removed before handling it
if (msg.message & 0x80000000) { --> handle_internal_message( msg.hwnd, msg.message, msg.wParam, msg.lParam ); if (!(flags & PM_REMOVE)) /* have to remove it explicitly */ --> peek_message( &msg, msg.hwnd, msg.message, msg.message, GET_MSG_REMOVE ); }
In 16bit SkiFree (again!), handle_internal_message() leads to PostQuitMessage() & DefWindowProc(WM_NCDESTROY), which calls queue_cleanup_window in wineserver, which clears the queue of messages for the window. So, when peek_message is called again it removes WM_QUIT, which therfore never gets returned to the app.
Perhaps handling of internal messages should even be moved into peek_message?
Richard.