Browse Source

WindowModes: Add a W_hidden WindowMode

This WindowMode hides the window from the window manager.

Note: Only implemented for X11 for now.
Mitchell Stokes 9 years ago
parent
commit
5f83c854d9

+ 2 - 0
panda/src/display/windowProperties.I

@@ -694,6 +694,8 @@ clear_mouse_mode() {
  *
  * W_undecorated: a window with no decorations (e.g., titlebar, borders, etc.)
  *
+ * W_hidden: hide the window from the window manager
+ *
  */
 INLINE void WindowProperties::
 set_window_mode(WindowMode mode) {

+ 4 - 0
panda/src/display/windowProperties.cxx

@@ -397,6 +397,8 @@ operator << (ostream &out, WindowProperties::WindowMode mode) {
     return out << "fullscreen";
   case WindowProperties::W_undecorated:
     return out << "undecorated";
+  case WindowProperties::W_hidden:
+    return out << "hidden";
   }
   return out << "**invalid WindowProperties::WindowMode(" << (int)mode << ")**";
 }
@@ -412,6 +414,8 @@ operator >> (istream &in, WindowProperties::WindowMode &mode) {
     mode = WindowProperties::W_fullscreen;
   } else if (word == "undecorated") {
     mode = WindowProperties::W_undecorated;
+  } else if (word == "hidden") {
+    mode = WindowProperties::W_hidden;
   } else {
     display_cat.warning()
       << "Unknown window mode: " << word << "\n";

+ 1 - 0
panda/src/display/windowProperties.h

@@ -44,6 +44,7 @@ PUBLISHED:
     W_regular,
     W_fullscreen,
     W_undecorated,
+    W_hidden,
   };
 
   WindowProperties();

+ 9 - 1
panda/src/x11display/x11GraphicsWindow.cxx

@@ -973,7 +973,9 @@ open_window() {
     XDefineCursor(_display, _xwindow, cursor);
   }
 
-  XMapWindow(_display, _xwindow);
+  if (_properties.get_window_mode() != WindowProperties::W_hidden) {
+    XMapWindow(_display, _xwindow);
+  }
 
   if (_properties.get_raw_mice()) {
     open_raw_mice();
@@ -1220,6 +1222,12 @@ set_wm_properties(const WindowProperties &properties, bool already_mapped) {
     XFree(class_hints_p);
   }
 
+  if (properties.get_window_mode() == WindowProperties::W_hidden) {
+    XUnmapWindow(_display, _xwindow);
+  } else {
+    XMapWindow(_display, _xwindow);
+  }
+
   // Also, indicate to the window manager that we'd like to get a chance to
   // close our windows cleanly, rather than being rudely disconnected from the
   // X server if the user requests a window close.