all repos — openbox @ cc36ecf2f2ba827081669512dc304c71b2169a83

openbox fork - make it a bit more like ryudo

don't reparent to root if the client has already reparented since unmapping
Dana Jansens danakj@orodu.net
commit

cc36ecf2f2ba827081669512dc304c71b2169a83

parent

f11bd1b0cc5973590d1ee547736ac00f50447efa

1 files changed, 12 insertions(+), 7 deletions(-)

jump to
M src/frame.ccsrc/frame.cc

@@ -429,13 +429,18 @@

void OBFrame::releaseClient() { - // XXX: check for a reparent before reparenting? - - // according to the ICCCM - if the client doesn't reparent to - // root, then we have to do it for them - XReparentWindow(otk::OBDisplay::display, _client->window(), - _screen->rootWindow(), - _client->area().x(), _client->area().y()); + // check if the app has already reparented its window away + XEvent ev; + if (XCheckTypedWindowEvent(otk::OBDisplay::display, _client->window(), + ReparentNotify, &ev)) { + XPutBack(otk::OBDisplay::display, &ev); + } else { + // 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()); + } }