ChangeLog: Map (WS_EX_TOOLWINDOW & WS_CAPTION) to _NET_WM_WINDOW_TYPE_UTILITY. This makes Delphi a bit easier to use, as floating palettes aren't unmanaged anymore. Index: dlls/x11drv/x11drv.h =================================================================== RCS file: /home/wine/wine/dlls/x11drv/x11drv.h,v retrieving revision 1.11 diff -u -b -r1.11 x11drv.h --- dlls/x11drv/x11drv.h 25 Nov 2003 03:27:38 -0000 1.11 +++ dlls/x11drv/x11drv.h 1 Dec 2003 00:38:03 -0000 @@ -395,6 +395,8 @@ XATOM__NET_WM_PID, XATOM__NET_WM_PING, XATOM__NET_WM_NAME, + XATOM__NET_WM_WINDOW_TYPE, + XATOM__NET_WM_WINDOW_TYPE_UTILITY, XATOM_XdndAware, XATOM_XdndEnter, XATOM_XdndPosition, Index: dlls/x11drv/window.c =================================================================== RCS file: /home/wine/wine/dlls/x11drv/window.c,v retrieving revision 1.65 diff -u -b -r1.65 window.c --- dlls/x11drv/window.c 21 Nov 2003 21:48:36 -0000 1.65 +++ dlls/x11drv/window.c 1 Dec 2003 00:38:03 -0000 @@ -81,6 +81,8 @@ "_NET_WM_PID", "_NET_WM_PING", "_NET_WM_NAME", + "_NET_WM_WINDOW_TYPE", + "_NET_WM_WINDOW_TYPE_UTILITY", "XdndAware", "XdndEnter", "XdndPosition", @@ -119,7 +121,8 @@ if (win->dwExStyle & WS_EX_TRAYWINDOW) return TRUE; /* child windows are not managed */ if (win->dwStyle & WS_CHILD) return FALSE; - /* tool windows are not managed */ + /* tool windows are not managed unless they have a caption */ + if ((win->dwExStyle & WS_EX_TOOLWINDOW) && ((win->dwStyle & WS_CAPTION) == WS_CAPTION)) return TRUE; if (win->dwExStyle & WS_EX_TOOLWINDOW) return FALSE; /* windows with caption or thick frame are managed */ if ((win->dwStyle & WS_CAPTION) == WS_CAPTION) return TRUE; @@ -424,6 +427,12 @@ XChangeProperty(display, data->whole_window, x11drv_atom(_NET_WM_PID), XA_CARDINAL, 32, PropModeReplace, (char *)&i, 1); + /* map WS_EX_TOOLWINDOW to _NET_WM_WINDOW_TYPE_UTILITY */ + if ((win->dwExStyle & WS_EX_TOOLWINDOW) && (win->dwStyle & WS_CAPTION)) { + Atom a = x11drv_atom(_NET_WM_WINDOW_TYPE_UTILITY); + XChangeProperty(display, data->whole_window, x11drv_atom(_NET_WM_WINDOW_TYPE), XA_ATOM, 32, PropModeReplace, (char*)&a, 1); + } + mwm_hints.flags = MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS; mwm_hints.functions = 0; if ((win->dwStyle & WS_CAPTION) == WS_CAPTION) mwm_hints.functions |= MWM_FUNC_MOVE; @@ -785,6 +794,8 @@ 0 ); } + + /* non-maximized child must be at bottom of Z order */ if ((win->dwStyle & (WS_CHILD|WS_MAXIMIZE)) == WS_CHILD) {