don't reparent to root if the client has already reparented since unmapping
This commit is contained in:
parent
f11bd1b0cc
commit
cc36ecf2f2
1 changed files with 12 additions and 7 deletions
19
src/frame.cc
19
src/frame.cc
|
@ -429,13 +429,18 @@ void OBFrame::grabClient()
|
||||||
|
|
||||||
void OBFrame::releaseClient()
|
void OBFrame::releaseClient()
|
||||||
{
|
{
|
||||||
// XXX: check for a reparent before reparenting?
|
// check if the app has already reparented its window away
|
||||||
|
XEvent ev;
|
||||||
// according to the ICCCM - if the client doesn't reparent to
|
if (XCheckTypedWindowEvent(otk::OBDisplay::display, _client->window(),
|
||||||
// root, then we have to do it for them
|
ReparentNotify, &ev)) {
|
||||||
XReparentWindow(otk::OBDisplay::display, _client->window(),
|
XPutBack(otk::OBDisplay::display, &ev);
|
||||||
_screen->rootWindow(),
|
} else {
|
||||||
_client->area().x(), _client->area().y());
|
// 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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue