/* Focus surface under cursor if it isn't already focused */
struct cursor_context ctx = get_cursor_context(server);
- if (ctx.view && rc.focus_follow_mouse) {
+ if (ctx.view && rc.focus_follow_mouse && !server->osd_state.cycle_view) {
+ /* Prevent changing keyboard focus during A-Tab */
desktop_focus_and_activate_view(&server->seat, ctx.view);
if (rc.raise_on_focus) {
/*
void
osd_finish(struct server *server)
{
- server->osd_state.cycle_view = NULL;
server->osd_state.preview_node = NULL;
server->osd_state.preview_anchor = NULL;
/* Hiding OSD may need a cursor change */
cursor_update_focus(server);
+
+ /*
+ * We delay resetting cycle_view until after cursor_update_focus()
+ * has been called to allow A-Tab keyboard focus switching even if
+ * followMouse has been configured and the cursor is on a different
+ * surface. Otherwise cursor_update_focus() would automatically
+ * refocus the surface the cursor is currently on.
+ */
+ server->osd_state.cycle_view = NULL;
}
void