Sergio <sdelreal(a)codeweavers.com> wrote:
@@ -701,7 +701,10 @@ static HWND DIALOG_CreateIndirect( HINSTANCE hInst, LPCVOID dlgTemplate,
if (template.style & WS_VISIBLE && !(GetWindowLongW( hwnd, GWL_STYLE ) & WS_VISIBLE)) { + HWND hwnd_capture; ShowWindow( hwnd, SW_SHOWNORMAL ); /* SW_SHOW doesn't always work */ + if ( (hwnd_capture = GetCapture()) && !IsChild( hwnd, hwnd_capture ) && modal_owner ) + SendMessageW(hwnd_capture, WM_CANCELMODE, 0, 0); }
This is most likely wrong, WM_CANCELMODE should be sent when the capturing window loses focus during ShowWindow( hwnd, SW_SHOWNORMAL ) call.
+static INT_PTR CALLBACK TestModalDlgWithCaptureProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + struct recvd_message msg; + + if (ignore_message( message )) return 0; + + switch (message) + { + case WM_NCHITTEST: + return HTCLIENT; + case WM_QUERYNEWPALETTE: + case WM_GETTEXT: + case WM_WINDOWPOSCHANGING: + case WM_WINDOWPOSCHANGED: + case WM_NCPAINT: + case WM_NCACTIVATE: + case WM_NCCALCSIZE: + case WM_NCDESTROY: + case WM_PAINT: + case WM_ERASEBKGND: + case WM_ACTIVATEAPP: + case WM_CTLCOLORDLG: + case WM_CTLCOLORBTN: + case WM_SETFOCUS: + case WM_KILLFOCUS: + case 0x90: + break;
The fact that you need to filter out so many messages is a clear sign that the test is broken. Same comment applies for the next message proc. -- Dmitry.