http://bugs.winehq.org/show_bug.cgi?id=24623
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |focht@gmx.net Component|-unknown |user32 Summary|Windows Live Essentials |Windows Live Essentials |2011 installer doesn't show |2011 installer doesn't show |any options on the first |any options on the first |screen |screen (support for | |BCM_GETIDEALSIZE needed, | |ideal width and height for | |a specified button) Severity|minor |normal
--- Comment #13 from Anastasius Focht focht@gmx.net 2012-04-08 16:37:57 CDT --- Hello,
it seems the culprit is the missing BCM_xxx messages support in Wine (it's a TODO). Using a window/message spy tool like "winspector" on the installer window you can highlight the parent window but not the two buttons which act as installer options. The reason is a zero height of the controls.
Parent creation:
--- snip --- 0024:trace:win:WIN_CreateWindowEx L"" L"LiveDialog" ex=00000000 style=4200004c 15,16 150x163 parent=0x10080 menu=(nil) inst=0x400000 params=(nil) 0024:trace:win:dump_window_styles style: WS_CHILD WS_CLIPCHILDREN 0000004c 0024:trace:win:dump_window_styles exstyle: ... 0024:trace:win:WIN_CreateWindowEx created window 0x100a8 --- snip ---
First child/button:
--- snip --- 0024:Call user32.CreateWindowExW(00000000,004129e8 L"BUTTON",0058873c L"Install all of Windows Live Essentials (recommended)",5001000e,00000000,00000000,00000244,00000000,000100a8,00000001,00400000,00000000) ret=00479048 0024:trace:win:WIN_CreateWindowEx L"Install all of Windows Live Essentials (recommended)" L"BUTTON" ex=00000000 style=5001000e 0,0 580x0 parent=0x100a8 menu=0x1 inst=0x400000 params=(nil) 0024:trace:win:dump_window_styles style: WS_CHILD WS_VISIBLE WS_TABSTOP 0000000e 0024:trace:win:dump_window_styles exstyle: 0024:trace:win:WIN_SetWindowLong 0x100aa -12 1 W 0024:trace:win:GetWindowRect hwnd 0x100aa (658,295)-(1238,295) ... 0024:trace:win:WIN_CreateWindowEx hwnd 0x100aa cs 0,0 580x0 ... 0024:trace:win:WIN_CreateWindowEx created window 0x100aa 0024:Ret user32.CreateWindowExW() retval=000100aa ret=00479048 ... --- snip ---
The installer immediately sends BCM_SETNOTE (0x1609):
--- snip --- 0024:Call user32.SendMessageW(000100aa,00001609,00000000,00574154) ret=0047906a 0024:Call window proc 0x7ebc82ef (hwnd=0x100aa,msg=WM_USER+4617,wp=00000000,lp=00574154) 0024:Ret window proc 0x7ebc82ef (hwnd=0x100aa,msg=WM_USER+4617,wp=00000000,lp=00574154) retval=00000000 0024:Ret user32.SendMessageW() retval=00000000 ret=0047906a --- snip ---
Not handled but no harm.
More importantly BCM_GETIDEALSIZE (0x1601) is sent:
--- snip --- 0024:Call user32.SendMessageW(000100aa,00001601,00000000,0032f6bc) ret=00479082 0024:Call window proc 0x7ebc82ef (hwnd=0x100aa,msg=WM_USER+4609,wp=00000000,lp=0032f6bc) 0024:Ret window proc 0x7ebc82ef (hwnd=0x100aa,msg=WM_USER+4609,wp=00000000,lp=0032f6bc) retval=00000000 0024:Ret user32.SendMessageW() retval=00000000 ret=00479082 --- snip ---
Wine doesn't handle this message (cx = cy = 0) which results in zero height of the control:
--- snip --- 0024:Call user32.SetWindowPos(000100aa,00000000,00000000,00000000,00000244,00000000,00000006) ret=00479096 0024:trace:win:SetWindowPos hwnd 0x100aa, after (nil), 0,0 (580x0), flags 00000006 0024:trace:win:dump_winpos_flags flags: SWP_NOMOVE SWP_NOZORDER 0024:Call window proc 0x7ebc82ef (hwnd=0x100aa,msg=WM_WINDOWPOSCHANGING,wp=00000000,lp=0032f5a8) 0024:Ret window proc 0x7ebc82ef (hwnd=0x100aa,msg=WM_WINDOWPOSCHANGING,wp=00000000,lp=0032f5a8) retval=00000000 0024:trace:win:SWP_DoWinPosChanging hwnd 0x100aa, after (nil), swp 0,0 580x0 flags 00001806 0024:trace:win:SWP_DoWinPosChanging current (0,0)-(580,0) style 5001000e new (0,0)-(580,0) 0024:Call window proc 0x7ebc82ef (hwnd=0x100aa,msg=WM_CHILDACTIVATE,wp=00000000,lp=00000000) 0024:Ret window proc 0x7ebc82ef (hwnd=0x100aa,msg=WM_CHILDACTIVATE,wp=00000000,lp=00000000) retval=00000000 0024:trace:win:USER_SetWindowPos status flags = 1807 0024:Ret user32.SetWindowPos() retval=00000001 ret=00479096 --- snip ---
Same applies to second child/button:
--- snip --- 0024:Call user32.CreateWindowExW(00000000,004129e8 L"BUTTON",0057e5e4 L"Choose the programs you want to install",5001000e,00000000,00000000,00000244,00000000,000100a8,00000002,00400000,00000000) ret=004790e0 0024:trace:win:WIN_CreateWindowEx L"Choose the programs you want to install" L"BUTTON" ex=00000000 style=5001000e 0,0 580x0 parent=0x100a8 menu=0x2 inst=0x400000 params=(nil) 0024:trace:win:dump_window_styles style: WS_CHILD WS_VISIBLE WS_TABSTOP 0000000e 0024:trace:win:dump_window_styles exstyle: ... 0024:Ret user32.CreateWindowExW() retval=000100ac ret=004790e0 0024:Call user32.SendMessageW(000100ac,00001601,00000000,0032f6b4) ret=00479114 0024:Call window proc 0x7ebc82ef (hwnd=0x100ac,msg=WM_USER+4609,wp=00000000,lp=0032f6b4) 0024:Ret window proc 0x7ebc82ef (hwnd=0x100ac,msg=WM_USER+4609,wp=00000000,lp=0032f6b4) retval=00000000 0024:Ret user32.SendMessageW() retval=00000000 ret=00479114 0024:Call user32.SetWindowPos(000100ac,00000000,00000000,00000000,00000244,00000000,00000006) ret=0047912a 0024:trace:win:SetWindowPos hwnd 0x100ac, after (nil), 0,0 (580x0), flags 00000006 0024:trace:win:dump_winpos_flags flags: SWP_NOMOVE SWP_NOZORDER 0024:Call window proc 0x7ebc82ef (hwnd=0x100ac,msg=WM_WINDOWPOSCHANGING,wp=00000000,lp=0032f5a8) 0024:Ret window proc 0x7ebc82ef (hwnd=0x100ac,msg=WM_WINDOWPOSCHANGING,wp=00000000,lp=0032f5a8) retval=00000000 0024:trace:win:SWP_DoWinPosChanging hwnd 0x100ac, after (nil), swp 0,0 580x0 flags 00001806 0024:trace:win:SWP_DoWinPosChanging current (0,0)-(580,0) style 5001000e new (0,0)-(580,0) 0024:Call window proc 0x7ebc82ef (hwnd=0x100ac,msg=WM_CHILDACTIVATE,wp=00000000,lp=00000000) 0024:Ret window proc 0x7ebc82ef (hwnd=0x100ac,msg=WM_CHILDACTIVATE,wp=00000000,lp=00000000) retval=00000000 0024:trace:win:USER_SetWindowPos status flags = 1807 0024:Ret user32.SetWindowPos() retval=00000001 ret=0047912a --- snip ---
MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/bb775961%28v=vs.85%2...
--- quote --- Note Windows Vista and later: If no special button width is desired, then you must set both members of SIZE to zero to calculate and return the ideal height and width. If the value of the cx member is greater than zero, then this value is considered the desired button width, and the ideal height for this width is calculated and returned in the cy member. The functionality of returning an ideal height for a specified button width is not available in Windows XP. --- quote ---
The installer will only run on Windows 7 so it expects the control height being calculated and returned.
Source (BCM_GETIDEALSIZE on TODO list): http://source.winehq.org/git/wine.git/blob/371cff4883f465587c5b00eb5a66b2c51...
$ du -sh wlsetup-web.exe 1.3M wlsetup-web.exe
$ sha1sum wlsetup-web.exe 140e41b28ae4d1794efb8f3d378cb0efbd137b8c wlsetup-web.exe
$ wine --version wine-1.5.1-197-g73e7346
Regards