Okay, went back to my notes and also did a bit more research with some of the accessibility inspector tools. Here's an excerpt from my notes, which I've confirmed to be the behavior on the various window classes:
Layout of an MSAA window object (represents an HWND): +------------------------------------------_-----+ |-0| -1 (Title) _ |_| x | |--+---------------------------------------------+ | File | Edit | Format | Help -2 | +---------------------------------------------+--+ | -3 | | | | | | | | | | | | | | | |-4| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------------------------------------------+--+ | -5 |-6| +---------------------------------------------+--+
-0: A "System" menubar (icon in top left corner.) -1: A title bar (also includes minimize, maximize, close) -2: An "Application" menubar (file, help, etc.) -3: A client area. Different for each window class. -4: A vertical scroll bar. -5: A horizontal scroll bar. -6: A grip between the horizontal/vertical scroll bars, for resizing
Even though not all windows have these pieces enabled in their window style, these objects are still created for each window object. The client area (3) is what changes between different window classes.
Window styles/WM_GETOBJECT OBJID's for each window part: -0: WS_SYSMENU/OBJID_SYSMENU -1: WS_CAPTION/OBJID_TITLEBAR -2: WS_SYSMENU/OBJID_MENU (also, only visible if the window is provided a menu class.) -3: WS_XXXXXXX/OBJID_CLIENT (all windows have a client area AFAICT.) -4: WS_VSCROLL/OBJID_VSCROLL -5: WS_HSCROLL/OBJID_HSCROLL -6: WS_SIZEBOX/OBJID_SIZEGRIP
https://docs.microsoft.com/en-us/windows/win32/winauto/window
All windows have a child count of 7, and each child is a full object from the above list.
I think we really only need unique behavior WRT window class in the client code. The rest of the objects are the same for all windows. So, the changes you've made make sense, and we can probably just leave the checks in the client.c file, we shouldn't need any in window.c. I'll work on following the style of the patches you've sent and send in a v3.