"Duane Clark" dclark@akamail.com wrote:
Changelog: A window with a WS_EX_APPWINDOW extended style can also get a menu.
[skipped]
/* Set the window menu */
- if ((wndPtr->dwStyle & (WS_CAPTION | WS_CHILD)) == WS_CAPTION )
- if ((wndPtr->dwStyle & WS_CAPTION || wndPtr->dwExStyle & WS_EX_APPWINDOW)
&& !( wndPtr->dwStyle & WS_CHILD) )
Sorry for the late response, but this doesn't look right to me. First of all check for WS_CAPTION should be if ((dwStyle & WS_CAPTION) == WS_CAPTION) because WS_CAPTION is a two bit style. Next, apparently menu can be assigned only for a window that has a caption and not is a child. If for some reason in your case a window has no WS_CAPTION style set (even after all style corrections) then it's a bug in Wine and it should be found and fixed.
I would suggest to write a conformance test for this, which will create windows with various styles, check whether they have a caption (by comparing client and window rectangles), then try to set a menu for a window.
Dmitry Timoshkov wrote:
"Duane Clark" dclark@akamail.com wrote:
Changelog: A window with a WS_EX_APPWINDOW extended style can also get a menu.
[skipped]
/* Set the window menu */
- if ((wndPtr->dwStyle & (WS_CAPTION | WS_CHILD)) == WS_CAPTION )
- if ((wndPtr->dwStyle & WS_CAPTION || wndPtr->dwExStyle & WS_EX_APPWINDOW)
&& !( wndPtr->dwStyle & WS_CHILD) )
Sorry for the late response, but this doesn't look right to me. First of all check for WS_CAPTION should be if ((dwStyle & WS_CAPTION) == WS_CAPTION) because WS_CAPTION is a two bit style. Next, apparently menu can be assigned only for a window that has a caption and not is a child. If for some reason in your case a window has no WS_CAPTION style set (even after all style corrections) then it's a bug in Wine and it should be found and fixed.
I would suggest to write a conformance test for this, which will create windows with various styles, check whether they have a caption (by comparing client and window rectangles), then try to set a menu for a window.
Well, just as a bit of info, the window does not appear to have a caption; either in Windows or Wine. The menu pops down when the mouse is slid to the very top of the window, and no other border decoration shows ever. Here is the call that does it, which is a call directly from the app.
08072f68:Call user32.CreateWindowExA(00040000,004bc998 "menuWndProc",40582b38 "",80000000,00000000,00000000,00000280,00000013,00010023,000000c8,00400000,00000000) ret=00414c77 trace:win:WIN_CreateWindowEx "" "menuWndProc" ex=00040000 style=80000000 0,0 640x19 parent=0x10023 menu=0xc8 inst=0x400000 params=(nil)
"Duane Clark" dclark@akamail.com wrote:
Well, just as a bit of info, the window does not appear to have a caption; either in Windows or Wine. The menu pops down when the mouse is slid to the very top of the window, and no other border decoration shows ever. Here is the call that does it, which is a call directly from the app.
08072f68:Call user32.CreateWindowExA(00040000,004bc998 "menuWndProc",40582b38 "",80000000,00000000,00000000,00000280,00000013,00010023,000000c8,00400000,00000000) ret=00414c77 trace:win:WIN_CreateWindowEx "" "menuWndProc" ex=00040000 style=80000000 0,0 640x19 parent=0x10023 menu=0xc8 inst=0x400000 params=(nil)
You are right, I stand corrected. Another tiny bits added to my test program show that in order to have a menu, window is not required to have a caption in Win32.
But test for WS_CAPTION still should be fixed.