[Bug 24623] Windows Live Essentials 2011 installer doesn't show any options on the first screen (support for BCM_GETIDEALSIZE needed, ideal width and height for a specified button)

wine-bugs at winehq.org wine-bugs at winehq.org
Sun Apr 8 16:37:57 CDT 2012


http://bugs.winehq.org/show_bug.cgi?id=24623

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |focht at 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 at 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%29.aspx

--- 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/371cff4883f465587c5b00eb5a66b2c517fd4c42:/dlls/user32/button.c#l30

$ 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

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list