diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-01-07 20:06:29 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-01-07 20:06:29 +0000 |
| commit | 1b13d34c1e0ef69036de51c289a83da3aaecef34 (patch) | |
| tree | 4c3402e99790c95d55247e4927f4b67068957c9a /src | |
| parent | e5eb783aa22440625d497a07fa079cae93bdaa86 (diff) | |
i think im handling reparent events correctly now, by unmanaging the window and then XMapping the client
Diffstat (limited to 'src')
| -rw-r--r-- | src/client.cc | 6 | ||||
| -rw-r--r-- | src/frame.cc | 8 |
2 files changed, 12 insertions, 2 deletions
diff --git a/src/client.cc b/src/client.cc index d38ca79b..9234a188 100644 --- a/src/client.cc +++ b/src/client.cc @@ -1269,6 +1269,12 @@ void OBClient::reparentHandler(const XReparentEvent &e) to an already unmapped window. */ + // put another copy of this event on the stack (for the frame reparent + // process) + XEvent ev; + ev.xreparent = e; + XPutBackEvent(otk::OBDisplay::display, &ev); + // this deletes us etc Openbox::instance->screen(_screen)->unmanageWindow(this); } diff --git a/src/frame.cc b/src/frame.cc index 55a0cec0..6d46d7b9 100644 --- a/src/frame.cc +++ b/src/frame.cc @@ -436,8 +436,12 @@ void OBFrame::releaseClient() XEvent ev; if (XCheckTypedWindowEvent(otk::OBDisplay::display, _client->window(), ReparentNotify, &ev)) { - // XXX: ob2/bb didn't do this.. look up this process in other wm's! - //XPutBackEvent(otk::OBDisplay::display, &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()); } else { // according to the ICCCM - if the client doesn't reparent to |
