focus_left_screen = FALSE;
- focus_fallback(FALSE, config_focus_under_mouse, TRUE);
+ focus_fallback(FALSE, config_focus_under_mouse, TRUE, TRUE);
/* We don't get a FocusOut for this case, because it's just moving
from our Inferior up to us. This happens when iconifying a
/* focus_set_client(NULL) has already been called */
client_calc_layer(client);
}
- if (e->xfocus.detail == NotifyPointerRoot ||
- e->xfocus.detail == NotifyDetailNone ||
- e->xfocus.detail == NotifyInferior ||
- e->xfocus.detail == NotifyNonlinear)
+ else if (e->xfocus.detail == NotifyPointerRoot ||
+ e->xfocus.detail == NotifyDetailNone ||
+ e->xfocus.detail == NotifyInferior ||
+ e->xfocus.detail == NotifyNonlinear)
{
XEvent ce;
*/
if (!focus_left_screen)
- focus_fallback(FALSE, config_focus_under_mouse, TRUE);
+ focus_fallback(FALSE, config_focus_under_mouse,
+ TRUE, TRUE);
}
}
else if (!client)
ob_debug_type(OB_DEBUG_FOCUS,
"Focus went to an unmanaged window 0x%x !\n",
ce.xfocus.window);
- focus_fallback(TRUE, config_focus_under_mouse, TRUE);
+ focus_fallback(TRUE, config_focus_under_mouse, TRUE, TRUE);
}
}
data->time = event_curtime;
ob_main_loop_timeout_add(ob_main_loop,
- config_focus_delay,
+ config_focus_delay * 1000,
focus_delay_func,
data, focus_delay_cmp, focus_delay_dest);
} else {
}
else if (msgtype == prop_atoms.net_wm_user_time) {
guint32 t;
- if (PROP_GET32(client->window, net_wm_user_time, cardinal, &t) &&
+ if (client == focus_client &&
+ PROP_GET32(client->window, net_wm_user_time, cardinal, &t) &&
t && !event_time_after(t, e->xproperty.time) &&
(!event_last_user_time ||
event_time_after(t, event_last_user_time)))
ObFocusDelayData *d = data;
Time old = event_curtime;
+ /* don't move focus and kill the menu or the move/resize */
+ if (menu_frame_visible || moveresize_in_progress) return FALSE;
+
event_curtime = d->time;
if (focus_client != d->client) {
if (client_focus(d->client) && config_focus_raise)