X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Fevent.c;h=3a8f96b612be011e15681a0dd564b1979e5b6286;hb=fc32577766755a84ac883b4d862fab3c5e681642;hp=79befa6625a9bcbffe0125d18616893a60a99003;hpb=d43a109ba2ffd1d6f3bbd42a93265143f0e56582;p=chaz%2Fopenbox diff --git a/openbox/event.c b/openbox/event.c index 79befa66..3a8f96b6 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -222,8 +222,10 @@ void event_process(XEvent *e) event_lasttime = e->xproperty.time; break; case FocusIn: +#ifdef DEBUG_FOCUS g_message("FocusIn on %lx mode %d detail %d", window, e->xfocus.mode, e->xfocus.detail); +#endif /* NotifyAncestor is not ignored in FocusIn like it is in FocusOut because of RevertToPointerRoot. If the focus ends up reverting to pointer root on a workspace change, then the FocusIn event that we @@ -240,17 +242,23 @@ void event_process(XEvent *e) return; } +#ifdef DEBUG_FOCUS g_message("FocusIn on %lx", window); +#endif break; case FocusOut: +#ifdef DEBUG_FOCUS g_message("FocusOut on %lx mode %d detail %d", window, e->xfocus.mode, e->xfocus.detail); +#endif if (e->xfocus.mode == NotifyGrab || e->xfocus.detail == NotifyInferior || e->xfocus.detail == NotifyAncestor || e->xfocus.detail > NotifyNonlinearVirtual) return; - - g_message("FocusOut on %lx", window); + +#ifdef DEBUG_FOCUS + g_message("FocusOut on %lx", window); +#endif /* Try process a FocusIn first, and if a legit one isn't found, then do the fallback shiznit. */ { @@ -281,7 +289,9 @@ void event_process(XEvent *e) event_lasttime = e->xcrossing.time; /* NotifyUngrab occurs when a mouse button is released and the event is caused, like when lowering a window */ - if (e->xcrossing.mode == NotifyGrab) return; + if (e->xcrossing.mode == NotifyGrab || + e->xcrossing.detail == NotifyInferior) + return; break; default: event_lasttime = CurrentTime; @@ -360,8 +370,10 @@ static void event_handle_client(Client *client, XEvent *e) case FocusIn: focus_set_client(client); case FocusOut: +#ifdef DEBUG_FOCUS g_message("Focus%s on client for %lx", (e->type==FocusIn?"In":"Out"), client->window); +#endif /* focus state can affect the stacking layer */ client_calc_layer(client); engine_frame_adjust_focus(client->frame); @@ -376,8 +388,13 @@ static void event_handle_client(Client *client, XEvent *e) client); focus_order[desktop] = g_list_prepend(focus_order[desktop], client); - } else if (focus_follow) + } else if (focus_follow) { +#ifdef DEBUG_FOCUS + g_message("EnterNotify on %lx, focusing window", + client->window); +#endif client_focus(client); + } } break; case ConfigureRequest: