From fade5572e3d157712a3552244358189abbf8efd5 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Wed, 8 Jan 2003 08:40:03 +0000 Subject: [PATCH] handle focus events SOO much more simply. and it works. fuck yes. at last. i think i can rest. --- otk/eventdispatcher.cc | 65 ++++++++++-------------------------------- 1 file changed, 15 insertions(+), 50 deletions(-) diff --git a/otk/eventdispatcher.cc b/otk/eventdispatcher.cc index b3c8a587..621cd6fc 100644 --- a/otk/eventdispatcher.cc +++ b/otk/eventdispatcher.cc @@ -99,65 +99,30 @@ void OtkEventDispatcher::dispatchEvents(void) void OtkEventDispatcher::dispatchFocus(const XEvent &e) { - Window newfocus = None; - - // any other types are not ones we're interested in - if (e.xfocus.detail != NotifyNonlinear) - return; if (e.type == FocusIn) { - printf("---\n"); - printf("Got FocusIn!\n"); - printf("Using FocusIn\n"); - newfocus = e.xfocus.window; - - if (newfocus != _focus) { - // send a FocusIn to whatever was just focused - dispatch(newfocus, e); - printf("Sent FocusIn 0x%lx\n", newfocus); - - // send a FocusOut to whatever used to be focused - if (_focus) { - XEvent ev; - ev.xfocus = e.xfocus; - ev.xfocus.window = _focus; - ev.type = FocusOut; - dispatch(_focus, ev); - printf("Sent FocusOut 0x%lx\n", _focus); - } + //printf("Got FocusIn!\n"); + + // send a FocusIn to whatever was just focused + dispatch(e.xfocus.window, e); + //printf("Sent FocusIn 0x%lx\n", e.xfocus.window); - // store the new focused window - _focus = newfocus; - } - } else if (e.type == FocusOut) { - bool focused = false; // found a new focus target? - printf("---\n"); - printf("Got FocusOut!\n"); + //printf("Got FocusOut!\n"); // FocusOut events just make us look for FocusIn events. They are ignored // otherwise. XEvent fi; - while (XCheckTypedEvent(OBDisplay::display, FocusIn, &fi)) { - if (e.xfocus.detail == NotifyNonlinear) { - printf("Found FocusIn\n"); - dispatchFocus(fi); - focused = true; - break; - } - } - if (!focused) { - // send a FocusOut to whatever used to be focused - if (_focus) { - XEvent ev; - ev.xfocus = e.xfocus; - ev.xfocus.window = _focus; - dispatch(_focus, ev); - printf("Sent FocusOut 0x%lx\n", _focus); - } - // store that no window has focus anymore - _focus = None; + if (XCheckTypedEvent(OBDisplay::display, FocusIn, &fi)) { + //printf("Found FocusIn\n"); + dispatchFocus(fi); + // dont unfocus the window we just focused! + if (fi.xfocus.window == e.xfocus.window) + return; } + + dispatch(e.xfocus.window, e); + //printf("Sent FocusOut 0x%lx\n", e.xfocus.window); } } -- 2.39.2