enter/leave and focus events are working beautifully
Dana Jansens danakj@orodu.net
3 files changed,
24 insertions(+),
7 deletions(-)
M
otk/eventdispatcher.cc
→
otk/eventdispatcher.cc
@@ -94,7 +94,7 @@ unfocus = e.xfocus.window;
focus = None; printf("FocusOut focus=%lx unfocus=%lx\n", focus, unfocus); } -/* // madly compress all crossing events + // madly compress all crossing events } else if (e.type == EnterNotify) { // any other types are not ones we're interested in if (e.xcrossing.mode == NotifyNormal) {@@ -109,7 +109,7 @@ if (e.xcrossing.mode == NotifyNormal) {
leave = e.xcrossing.window; leave_root = e.xcrossing.root; printf("Leave enter=%lx leave=%lx\n", enter, leave); - }*/ + } } else { // normal events dispatch(e);@@ -118,7 +118,7 @@ }
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);@@ -128,12 +128,12 @@ } else if (focus != None) {
// the last focus event was a FocusIn, so unfocus what used to be focus and // focus this new target 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); } - printf("FOCUSING: %lx\n", focus); +// printf("FOCUSING: %lx\n", focus); _focus_e.xfocus.type = FocusIn; _focus_e.xfocus.window = focus; dispatch(_focus_e);
M
src/client.cc
→
src/client.cc
@@ -882,8 +882,14 @@ Openbox::instance->setFocusedClient(0);
} -void OBClient::focusHandler(const XFocusChangeEvent &) +void OBClient::focusHandler(const XFocusChangeEvent &e) { +#ifdef DEBUG + printf("FocusIn for 0x%lx\n", e.window); +#endif // DEBUG + + OtkEventHandler::focusHandler(e); + frame->focus(); _focused = true;@@ -891,8 +897,14 @@ Openbox::instance->setFocusedClient(this);
} -void OBClient::unfocusHandler(const XFocusChangeEvent &) +void OBClient::unfocusHandler(const XFocusChangeEvent &e) { +#ifdef DEBUG + printf("FocusOut for 0x%lx\n", e.window); +#endif // DEBUG + + OtkEventHandler::unfocusHandler(e); + frame->unfocus(); _focused = false; }@@ -900,6 +912,10 @@
void OBClient::configureRequestHandler(const XConfigureRequestEvent &e) { +#ifdef DEBUG + printf("ConfigureRequest for 0x%lx\n", e.window); +#endif // DEBUG + OtkEventHandler::configureRequestHandler(e); // XXX: if we are iconic (or shaded? (fvwm does that)) ignore the event
M
src/frame.cc
→
src/frame.cc
@@ -103,6 +103,7 @@ void OBFrame::focus()
{ otk::OtkWidget::focus(); update(); + _handle.update(); }