http://bugs.winehq.org/show_bug.cgi?id=12104
Bernhard Übelacker bernhardu@vr-web.de changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |bernhardu@vr-web.de
--- Comment #3 from Bernhard Übelacker bernhardu@vr-web.de 2009-02-10 14:59:39 --- still present in git from 2009-02-09.
It is also visible in the first page.
This setup consists of some property pages laying on a property sheet. It replaces the the WindowProc of the sheet. In the custom WindowProc it relies that on startup a WM_SIZE message is received.
cygwin:propsheet.cc:PropSheetWndProc The first time we get a WM_SIZE, the client rect will be all zeros.) (for this reason I think it wants to ignore the first one, but needs it)
This WindowProc begins to adjusts the controls from the second WM_SIZE message it receives. Therefore if you maximize the window it receives one message (the first one) which is ignored and the controls are still unresized/moved sitting in the full screen parent window.
If you resize the frame first a little bit and maximize it now the window is resized (nearly) correct.
The missing WM_SIZE I think should be sent in wine:dlls/user32/defwnd.c:DEFWND_HandleWindowPosChanged by somehow getting SWP_NOCLIENTSIZE unset or SWP_STATECHANGED set.
I tested with quick adding in wine:dlls/user32/winpos.c:USER_SetWindowPos just before the last SendMessageW the following:
@@ -2005,4 +2005,5 @@ BOOL USER_SetWindowPos( WINDOWPOS * winpos ) winpos->cx = newWindowRect.right - newWindowRect.left; winpos->cy = newWindowRect.bottom - newWindowRect.top; + winpos->flags |= SWP_STATECHANGED; SendMessageW( winpos->hwnd, WM_WINDOWPOSCHANGED, 0, (LPARAM)winpos ); }
With this modification the resize works for this setup (but will surely break all other applications)
I will attach logs (WINEDEBUG=trace+message) once without and once with the modification.