X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Fevent.c;h=cb739339e6d8b961bb9c653b1e90f3e4f17626d7;hb=7d164842e0d0c3138401fad0dafc6f21bba0a04f;hp=c19f70175d1567323b8a28a906cd70e476f3b094;hpb=2fb7a6e4782013f7fca8a2b591aecbd54c262f07;p=chaz%2Fopenbox diff --git a/openbox/event.c b/openbox/event.c index c19f7017..cb739339 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -319,6 +319,12 @@ static gboolean wanted_focusevent(XEvent *e, gboolean in_client_only) if (!w || !WINDOW_IS_CLIENT(w)) return FALSE; } + else { + /* This means focus reverted to parent from the client (this + happens often during iconify animation) */ + if (detail == NotifyInferior) + return TRUE; + } /* This means focus moved from the root window to a client */ if (detail == NotifyVirtual) @@ -480,7 +486,8 @@ static void event_process(const XEvent *ec, gpointer data) { XEvent ce; - ob_debug_type(OB_DEBUG_FOCUS, "Focus went to pointer root/none\n"); + ob_debug_type(OB_DEBUG_FOCUS, "Focus went to pointer root/none or" + " the frame window\n"); /* If another FocusIn is in the queue then don't fallback yet. This fixes the fun case of: @@ -502,7 +509,7 @@ static void event_process(const XEvent *ec, gpointer data) ob_debug_type(OB_DEBUG_FOCUS, " but another FocusIn is coming\n"); } else { - /* Focus has been reverted to the root window or nothing. + /* Focus has been reverted. FocusOut events come after UnmapNotify, so we don't need to worry about focusing an invalid window @@ -554,12 +561,8 @@ static void event_process(const XEvent *ec, gpointer data) xerror_set_ignore(FALSE); /* nothing is focused */ focus_set_client(NULL); - } else if (ce.xany.window == e->xany.window) { - ob_debug_type(OB_DEBUG_FOCUS, "Focus didn't go anywhere\n"); - /* If focus didn't actually move anywhere, there is nothing to do*/ - nomove = TRUE; } else { - /* Focus did move, so process the FocusIn event */ + /* Focus moved, so process the FocusIn event */ ObEventData ed = { .ignored = FALSE }; event_process(&ce, &ed); if (ed.ignored) { @@ -572,10 +575,10 @@ static void event_process(const XEvent *ec, gpointer data) } } - if (client && !nomove) { + if (client && client != focus_client) { frame_adjust_focus(client->frame, FALSE); - if (client == focus_client) - focus_set_client(NULL); + /* focus_set_client(NULL) has already been called in this + section or by focus_fallback */ client_calc_layer(client); } } else if (timewinclients) @@ -1585,8 +1588,8 @@ static gboolean event_handle_menu_keyboard(XEvent *ev) menu_frame_select_next(frame); } - /* keyboard accelerator shortcuts. */ - else if (ev->xkey.state == 0 && + /* keyboard accelerator shortcuts. (allow controlmask) */ + else if ((ev->xkey.state & ~ControlMask) == 0 && /* was it a valid key? */ unikey != 0 && /* don't bother if the menu is empty. */