enter/leave and focus events are working beautifully
This commit is contained in:
parent
51f8b875b3
commit
3a4f91b537
3 changed files with 24 additions and 7 deletions
|
@ -94,7 +94,7 @@ void OtkEventDispatcher::dispatchEvents(void)
|
|||
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 @@ void OtkEventDispatcher::dispatchEvents(void)
|
|||
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 @@ 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);
|
||||
|
@ -128,12 +128,12 @@ void OtkEventDispatcher::dispatchEvents(void)
|
|||
// 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);
|
||||
|
|
|
@ -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();
|
||||
_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();
|
||||
_focused = false;
|
||||
}
|
||||
|
@ -900,6 +912,10 @@ void OBClient::unfocusHandler(const XFocusChangeEvent &)
|
|||
|
||||
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
|
||||
|
|
|
@ -103,6 +103,7 @@ void OBFrame::focus()
|
|||
{
|
||||
otk::OtkWidget::focus();
|
||||
update();
|
||||
_handle.update();
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue