focus_left_screen = FALSE;
- focus_fallback(FALSE, FALSE);
+ focus_fallback(FALSE, FALSE, 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
*/
if (!focus_left_screen)
- focus_fallback(FALSE, FALSE);
+ focus_fallback(FALSE, FALSE, 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, FALSE);
+ focus_fallback(TRUE, FALSE, TRUE);
}
}
if (e->xconfigurerequest.value_mask & CWStackMode) {
ObClient *sibling = NULL;
+ gulong ignore_start;
/* get the sibling */
if (e->xconfigurerequest.value_mask & CWSibling) {
}
/* activate it rather than just focus it */
+ if (!config_focus_under_mouse)
+ ignore_start = event_start_ignore_all_enters();
stacking_restack_request(client, sibling,
e->xconfigurerequest.detail,
TRUE);
+ if (!config_focus_under_mouse)
+ event_end_ignore_all_enters(ignore_start);
/* if a stacking change moves the window without resizing */
move = TRUE;
e->xclient.data.l[2] == TopIf ||
e->xclient.data.l[2] == Opposite)
{
+ gulong ignore_start;
+
+ if (!config_focus_under_mouse)
+ ignore_start = event_start_ignore_all_enters();
/* just raise, don't activate */
stacking_restack_request(client, sibling,
e->xclient.data.l[2], FALSE);
+ if (!config_focus_under_mouse)
+ event_end_ignore_all_enters(ignore_start);
+
/* send a synthetic ConfigureNotify, cuz this is supposed
to be like a ConfigureRequest. */
client_reconfigure(client);
/* XXX wraparound... */
ob_debug(" ignore range %u-%u\n", r->start, r->end);
- if (e->xany.serial > r->end) {
+ if ((glong)(e->xany.serial - r->end) > 0) {
+ /* past the end */
ignore_serials = g_slist_delete_link(ignore_serials, it);
g_free(r);
}
- else if (e->xany.serial >= r->start)
+ else if ((glong)(e->xany.serial - r->start) >= 0)
return TRUE;
}
return FALSE;