enter/leave and focus events are working beautifully

This commit is contained in:
Dana Jansens 2002-12-27 08:33:57 +00:00
parent 51f8b875b3
commit 3a4f91b537
3 changed files with 24 additions and 7 deletions

View file

@ -94,7 +94,7 @@ void OtkEventDispatcher::dispatchEvents(void)
focus = None; 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 // madly compress all crossing events
} else if (e.type == EnterNotify) { } else if (e.type == EnterNotify) {
// any other types are not ones we're interested in // any other types are not ones we're interested in
if (e.xcrossing.mode == NotifyNormal) { if (e.xcrossing.mode == NotifyNormal) {
@ -109,7 +109,7 @@ void OtkEventDispatcher::dispatchEvents(void)
leave = e.xcrossing.window; leave = e.xcrossing.window;
leave_root = e.xcrossing.root; leave_root = e.xcrossing.root;
printf("Leave enter=%lx leave=%lx\n", enter, leave); printf("Leave enter=%lx leave=%lx\n", enter, leave);
}*/ }
} else { } else {
// normal events // normal events
dispatch(e); dispatch(e);
@ -118,7 +118,7 @@ void OtkEventDispatcher::dispatchEvents(void)
if (unfocus != None) { if (unfocus != None) {
// the last focus event was an FocusOut, so where the hell is the focus at? // 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.type = FocusOut;
_focus_e.xfocus.window = unfocus; _focus_e.xfocus.window = unfocus;
dispatch(_focus_e); dispatch(_focus_e);
@ -128,12 +128,12 @@ void OtkEventDispatcher::dispatchEvents(void)
// the last focus event was a FocusIn, so unfocus what used to be focus and // the last focus event was a FocusIn, so unfocus what used to be focus and
// focus this new target // focus this new target
if (_focus != None) { if (_focus != None) {
printf("UNFOCUSING: %lx\n", _focus); // printf("UNFOCUSING: %lx\n", _focus);
_focus_e.xfocus.type = FocusOut; _focus_e.xfocus.type = FocusOut;
_focus_e.xfocus.window = _focus; _focus_e.xfocus.window = _focus;
dispatch(_focus_e); dispatch(_focus_e);
} }
printf("FOCUSING: %lx\n", focus); // printf("FOCUSING: %lx\n", focus);
_focus_e.xfocus.type = FocusIn; _focus_e.xfocus.type = FocusIn;
_focus_e.xfocus.window = focus; _focus_e.xfocus.window = focus;
dispatch(_focus_e); dispatch(_focus_e);

View file

@ -882,8 +882,14 @@ void OBClient::unfocus()
} }
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(); frame->focus();
_focused = true; _focused = true;
@ -891,8 +897,14 @@ void OBClient::focusHandler(const XFocusChangeEvent &)
} }
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(); frame->unfocus();
_focused = false; _focused = false;
} }
@ -900,6 +912,10 @@ void OBClient::unfocusHandler(const XFocusChangeEvent &)
void OBClient::configureRequestHandler(const XConfigureRequestEvent &e) void OBClient::configureRequestHandler(const XConfigureRequestEvent &e)
{ {
#ifdef DEBUG
printf("ConfigureRequest for 0x%lx\n", e.window);
#endif // DEBUG
OtkEventHandler::configureRequestHandler(e); OtkEventHandler::configureRequestHandler(e);
// XXX: if we are iconic (or shaded? (fvwm does that)) ignore the event // XXX: if we are iconic (or shaded? (fvwm does that)) ignore the event

View file

@ -103,6 +103,7 @@ void OBFrame::focus()
{ {
otk::OtkWidget::focus(); otk::OtkWidget::focus();
update(); update();
_handle.update();
} }