X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fframe.cc;h=c5b144c5f3cbd4f8104389cb7529c008a77c8fef;hb=6bad7e676ad841ffce8e2a05f0d8538f149454ea;hp=9c24689de0c23208b9fa48d7371b9ce687ff48a3;hpb=2ae5aaca65b4d9c9747fe787c920a547e7ec13c0;p=chaz%2Fopenbox diff --git a/src/frame.cc b/src/frame.cc index 9c24689d..c5b144c5 100644 --- a/src/frame.cc +++ b/src/frame.cc @@ -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());