]> Dogcows Code - chaz/openbox/blobdiff - src/frame.cc
map the window if it was reparented, on release
[chaz/openbox] / src / frame.cc
index 9c24689de0c23208b9fa48d7371b9ce687ff48a3..c5b144c5f3cbd4f8104389cb7529c008a77c8fef 100644 (file)
@@ -56,14 +56,11 @@ OBFrame::OBFrame(OBClient *client, otk::Style *style)
   otk::OtkWidget::unfocus(); // stuff starts out appearing focused in otk
   
   _plate.show(); // the other stuff is shown based on decor settings
-  
-  grabClient();
 }
 
 
 OBFrame::~OBFrame()
 {
-  releaseClient();
 }
 
 
@@ -432,20 +429,17 @@ void OBFrame::grabClient()
 
 void OBFrame::releaseClient()
 {
-  // check if the app has already reparented its window to the root window
   XEvent ev;
+
+  // check if the app has already reparented its window away
   if (XCheckTypedWindowEvent(otk::OBDisplay::display, _client->window(),
                              ReparentNotify, &ev)) {
-    /*
-      If the app reparented itself, then we unmanage the window. This causes
-      the window to be unmapped, so to be nice to it, we remap the window
-      here. We don't put the event back onto the stack because we put it there
-      in the first place.
-    */
-    XMapWindow(otk::OBDisplay::display, _client->window());
+    XPutBackEvent(otk::OBDisplay::display, &ev);
+    // re-map the window since the unmanaging process unmaps it
+    XMapWindow(otk::OBDisplay::display, _client->window());  
   } else {
-    // according to the ICCCM - if the client doesn't reparent to
-    // root, then we have to do it for them
+    // according to the ICCCM - if the client doesn't reparent itself, then we
+    // will reparent the window to root for them
     XReparentWindow(otk::OBDisplay::display, _client->window(),
                     _screen->rootWindow(),
                     _client->area().x(), _client->area().y());
This page took 0.022036 seconds and 4 git commands to generate.