X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fevent.c;h=3a8f96b612be011e15681a0dd564b1979e5b6286;hb=fc32577766755a84ac883b4d862fab3c5e681642;hp=72ba4d1abe8f019b8ab28dc51a3f904afd857da9;hpb=d1913d1d015efae0687f3703ca846f1ace42ded2;p=chaz%2Fopenbox diff --git a/openbox/event.c b/openbox/event.c index 72ba4d1a..3a8f96b6 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -154,8 +154,6 @@ void event_process(XEvent *e) switch (e->type) { case ButtonPress: case ButtonRelease: - if (ob_state != State_Running) return; - event_lasttime = e->xbutton.time; e->xbutton.state &= ~(LockMask | NumLockMask | ScrollLockMask); /* kill off the Button1Mask etc, only want the modifiers */ @@ -163,8 +161,6 @@ void event_process(XEvent *e) Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask); break; case KeyPress: - if (ob_state != State_Running) return; - event_lasttime = e->xkey.time; e->xkey.state &= ~(LockMask | NumLockMask | ScrollLockMask); /* kill off the Button1Mask etc, only want the modifiers */ @@ -189,8 +185,6 @@ void event_process(XEvent *e) break; case KeyRelease: - if (ob_state != State_Running) return; - event_lasttime = e->xkey.time; e->xkey.state &= ~(LockMask | NumLockMask | ScrollLockMask); /* kill off the Button1Mask etc, only want the modifiers */ @@ -213,8 +207,6 @@ void event_process(XEvent *e) } break; case MotionNotify: - if (ob_state != State_Running) return; - event_lasttime = e->xmotion.time; e->xmotion.state &= ~(LockMask | NumLockMask | ScrollLockMask); /* kill off the Button1Mask etc, only want the modifiers */ @@ -230,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 @@ -248,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. */ { @@ -289,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; @@ -368,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); @@ -384,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: