summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-01-07 20:06:29 +0000
committerDana Jansens <danakj@orodu.net>2003-01-07 20:06:29 +0000
commit1b13d34c1e0ef69036de51c289a83da3aaecef34 (patch)
tree4c3402e99790c95d55247e4927f4b67068957c9a /src
parente5eb783aa22440625d497a07fa079cae93bdaa86 (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.cc6
-rw-r--r--src/frame.cc8
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