···551 case XRT_SESSION_EVENT_STATE_CHANGE:
552 sess->compositor_visible = xse.state.visible;
553 sess->compositor_focused = xse.state.focused;
00000554 break;
555 case XRT_SESSION_EVENT_OVERLAY_CHANGE:
556#ifdef OXR_HAVE_EXTX_overlay
···1162 "Failed to create xrt_session and xrt_compositor_native! '%i'", xret);
1163 }
1164 if (sess->sys->xsysc->xmcc != NULL) {
1165- xrt_syscomp_set_state(sess->sys->xsysc, &sess->xcn->base, true, true);
1166 xrt_syscomp_set_z_order(sess->sys->xsysc, &sess->xcn->base, 0);
1167 }
1168 return XR_SUCCESS;
···551 case XRT_SESSION_EVENT_STATE_CHANGE:
552 sess->compositor_visible = xse.state.visible;
553 sess->compositor_focused = xse.state.focused;
554+555+ // Do not use xse.state.timestamp_ns, server side focused / visible state does not correspond
556+ // 1:1 to the cycle we tell the app. In particular the compositor may have become focused /
557+ // visible much earlier than what we tell the app when it became so.
558+559 break;
560 case XRT_SESSION_EVENT_OVERLAY_CHANGE:
561#ifdef OXR_HAVE_EXTX_overlay
···1167 "Failed to create xrt_session and xrt_compositor_native! '%i'", xret);
1168 }
1169 if (sess->sys->xsysc->xmcc != NULL) {
1170+ xrt_syscomp_set_state(sess->sys->xsysc, &sess->xcn->base, true, true, os_monotonic_get_ns());
1171 xrt_syscomp_set_z_order(sess->sys->xsysc, &sess->xcn->base, 0);
1172 }
1173 return XR_SUCCESS;