#include "openbox.h"
#include "client.h"
-#include "config.h"
#include "xerror.h"
#include "prop.h"
#include "screen.h"
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
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. */
{
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;
XEvent ce;
Atom msgtype;
int i=0;
- ConfigValue focus_follow;
switch (e->type) {
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);
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);
+ } else if (focus_follow) {
+#ifdef DEBUG_FOCUS
+ g_message("EnterNotify on %lx, focusing window",
+ client->window);
+#endif
+ client_focus(client);
}
}
break;