Implement support for NETWM utility window type

Mike Hearn mike at theoretic.com
Sun Nov 30 18:40:38 CST 2003


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)
     {





More information about the wine-patches mailing list