X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fevent.c;h=7e0dc0aaf0aba1a1bf115fe59fdcb8fe580ac3c1;hb=63bbbaefc73cc5495bae36a0021cd99d910e254f;hp=f140bfcf17056c386fab33a08d6b7bb6144ef4f7;hpb=bf32b376b595eab16a300f63937cad1042361eec;p=chaz%2Fopenbox diff --git a/openbox/event.c b/openbox/event.c index f140bfcf..7e0dc0aa 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -226,7 +226,7 @@ void event_process(XEvent *e) if (e->xfocus.detail == NotifyInferior || e->xfocus.detail == NotifyAncestor || e->xfocus.detail > NotifyNonlinearVirtual) return; - g_message("FocusIn on %lx", window);*/ + g_message("FocusIn on %lx", window); break; case FocusOut: g_message("FocusOut on %lx mode %d detail %d", window, @@ -245,8 +245,12 @@ void event_process(XEvent *e) if (fi.xfocus.window == e->xfocus.window) return; + /* secret magic way of event_process telling us that no client + was found for the FocusIn event */ + if (fi.xfocus.window == None) + focus_fallback(FALSE); } else - focus_set_client(NULL); + focus_fallback(FALSE); } break; case EnterNotify: @@ -270,6 +274,8 @@ void event_process(XEvent *e) event_handle_root(e); else if (e->type == MapRequest) client_manage(window); + else if (e->type == FocusIn) + e->xfocus.window = None; /* says no client was found for the event */ else if (e->type == ConfigureRequest) { /* unhandled configure requests must be used to configure the window directly */ @@ -343,17 +349,21 @@ static void event_handle_client(Client *client, XEvent *e) engine_frame_adjust_focus(client->frame); break; case EnterNotify: - if (ob_state == State_Starting) { - /* move it to the top of the focus order */ - guint desktop = client->desktop; - if (desktop == DESKTOP_ALL) desktop = screen_desktop; - focus_order[desktop] = g_list_remove(focus_order[desktop], client); - focus_order[desktop] = g_list_prepend(focus_order[desktop],client); - } else { - if (!config_get("focusFollowsMouse", Config_Bool, &focus_follow)) - g_assert_not_reached(); - if (focus_follow.bool) - client_focus(client); + if (client_normal(client)) { + if (ob_state == State_Starting) { + /* move it to the top of the focus order */ + guint desktop = client->desktop; + if (desktop == DESKTOP_ALL) desktop = screen_desktop; + focus_order[desktop] = g_list_remove(focus_order[desktop], + client); + focus_order[desktop] = g_list_prepend(focus_order[desktop], + client); + } else { + if (!config_get("focusFollowsMouse",Config_Bool,&focus_follow)) + g_assert_not_reached(); + if (focus_follow.bool) + client_focus(client); + } } break; case ConfigureRequest: