summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-01-07 19:54:00 +0000
committerDana Jansens <danakj@orodu.net>2003-01-07 19:54:00 +0000
commite5eb783aa22440625d497a07fa079cae93bdaa86 (patch)
treebdb490d96fa562da964bf81a63c6f6662f835531
parenta2de94e91e1c0e7775c97745ae11d14e5c5f5659 (diff)
ignore the right about of unmap notifies
-rw-r--r--otk/eventdispatcher.cc14
-rw-r--r--src/frame.cc18
2 files changed, 20 insertions, 12 deletions
diff --git a/otk/eventdispatcher.cc b/otk/eventdispatcher.cc
index 57613961..36802f16 100644
--- a/otk/eventdispatcher.cc
+++ b/otk/eventdispatcher.cc
@@ -104,14 +104,14 @@ void OtkEventDispatcher::dispatchEvents(void)
if (e.xfocus.detail == NotifyNonlinear) {
focus = e.xfocus.window;
unfocus = None;
- printf("FocusIn focus=%lx unfocus=%lx\n", focus, unfocus);
+ //printf("FocusIn focus=%lx unfocus=%lx\n", focus, unfocus);
}
} else if (e.type == FocusOut) {
// any other types are not ones we're interested in
if (e.xfocus.detail == NotifyNonlinear) {
unfocus = e.xfocus.window;
focus = None;
- printf("FocusOut focus=%lx unfocus=%lx\n", focus, unfocus);
+ //printf("FocusOut focus=%lx unfocus=%lx\n", focus, unfocus);
}
// madly compress all crossing events
} else if (e.type == EnterNotify) {
@@ -120,14 +120,14 @@ void OtkEventDispatcher::dispatchEvents(void)
// any other types are not ones we're interested in
enter = e.xcrossing.window;
enter_root = e.xcrossing.root;
- printf("Enter enter=%lx leave=%lx\n", enter, leave);
+ //printf("Enter enter=%lx leave=%lx\n", enter, leave);
}
} else if (e.type == LeaveNotify) {
// any other types are not ones we're interested in
if (e.xcrossing.mode == NotifyNormal) {
leave = e.xcrossing.window;
leave_root = e.xcrossing.root;
- printf("Leave enter=%lx leave=%lx\n", enter, leave);
+ //printf("Leave enter=%lx leave=%lx\n", enter, leave);
}
} else {
// normal events
@@ -137,7 +137,7 @@ void OtkEventDispatcher::dispatchEvents(void)
if (unfocus != None) {
// the last focus event was an FocusOut, so where the hell is the focus at?
- printf("UNFOCUSING: %lx\n", unfocus);
+ //printf("UNFOCUSING: %lx\n", unfocus);
_focus_e.xfocus.type = FocusOut;
_focus_e.xfocus.window = unfocus;
dispatch(_focus_e.xfocus.window, _focus_e);
@@ -146,13 +146,13 @@ void OtkEventDispatcher::dispatchEvents(void)
} else if (focus != None && focus != _focus) {
// the last focus event was a FocusIn, so unfocus what used to be focus and
// focus this new target
- printf("FOCUSING: %lx\n", focus);
+ //printf("FOCUSING: %lx\n", focus);
_focus_e.xfocus.type = FocusIn;
_focus_e.xfocus.window = focus;
dispatch(_focus_e.xfocus.window, _focus_e);
if (_focus != None) {
- printf("UNFOCUSING: %lx\n", _focus);
+ //printf("UNFOCUSING: %lx\n", _focus);
_focus_e.xfocus.type = FocusOut;
_focus_e.xfocus.window = _focus;
dispatch(_focus_e.xfocus.window, _focus_e);
diff --git a/src/frame.cc b/src/frame.cc
index 5bed5833..55a0cec0 100644
--- a/src/frame.cc
+++ b/src/frame.cc
@@ -407,9 +407,16 @@ void OBFrame::grabClient()
// reparent the client to the frame
XReparentWindow(otk::OBDisplay::display, _client->window(),
_plate.window(), 0, 0);
- // this generates 2 unmap's that we catch, one to the window and one to root,
- // but both have .window set to this window, so both need to be ignored
- _client->ignore_unmaps+=2;
+ /*
+ When reparenting the client window, it is usually not mapped yet, since
+ this occurs from a MapRequest. However, in the case where Openbox is
+ starting up, the window is already mapped, so we'll see unmap events for
+ it. There are 2 unmap events generated that we see, one with the 'event'
+ member set the root window, and one set to the client, but both get handled
+ and need to be ignored.
+ */
+ if (Openbox::instance->state() == Openbox::State_Starting)
+ _client->ignore_unmaps += 2;
// select the event mask on the client's parent (to receive config req's)
XSelectInput(otk::OBDisplay::display, _plate.window(),
@@ -430,7 +437,8 @@ void OBFrame::releaseClient()
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);
+ //XPutBackEvent(otk::OBDisplay::display, &ev);
+ 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
@@ -440,7 +448,7 @@ void OBFrame::releaseClient()
}
// do an extra map here .. ? XXX
- XMapWindow(otk::OBDisplay::display, _client->window());
+// XMapWindow(otk::OBDisplay::display, _client->window());
}