yet more haxes to make focus events work the way i want. this is rough shit.

This commit is contained in:
Dana Jansens 2003-03-31 06:36:59 +00:00
parent a8afa4d073
commit e6818c741c

View file

@ -232,7 +232,8 @@ void event_process(XEvent *e)
for FocusOut, so it is safely ignored there. for FocusOut, so it is safely ignored there.
*/ */
if (e->xfocus.detail == NotifyInferior || if (e->xfocus.detail == NotifyInferior ||
e->xfocus.detail > NotifyNonlinearVirtual || client == NULL) { e->xfocus.detail > NotifyNonlinearVirtual ||
client == NULL) {
/* says a client was not found for the event (or a valid FocusIn /* says a client was not found for the event (or a valid FocusIn
event was not found. event was not found.
*/ */
@ -254,13 +255,21 @@ void event_process(XEvent *e)
/* Try process a FocusIn first, and if a legit one isn't found, then /* Try process a FocusIn first, and if a legit one isn't found, then
do the fallback shiznit. */ do the fallback shiznit. */
{ {
XEvent fi; XEvent fi, fo;
gboolean isfo = FALSE;
if (XCheckTypedEvent(ob_display, FocusIn, &fi)) { if (XCheckTypedEvent(ob_display, FocusIn, &fi)) {
event_process(&fi); event_process(&fi);
/* when we have gotten a fi/fo pair, then see if there are any
more fo's coming. if there are, then don't fallback just yet
*/
if ((isfo = XCheckTypedEvent(ob_display, FocusOut, &fo)))
XPutBackEvent(ob_display, &fo);
/* secret magic way of event_process telling us that no client /* secret magic way of event_process telling us that no client
was found for the FocusIn event. ^_^ */ was found for the FocusIn event. ^_^ */
if (fi.xfocus.window == None) if (!isfo && fi.xfocus.window == None)
focus_fallback(FALSE); focus_fallback(FALSE);
if (fi.xfocus.window == e->xfocus.window) if (fi.xfocus.window == e->xfocus.window)
return; return;