+
+ /* Send leave event */
+ uint32_t s = get_serial();
+ wl_fixed_t x = wl_fixed_from_double(cursor_x - win->x);
+ wl_fixed_t y = wl_fixed_from_double(cursor_y - win->y);
+ if (focus && focus->sys->sfc && focus->sys->cdata) {
+ printf("sys_focus - leave win=%p\n", focus);
+ for (list_t *cur = focus->sys->cdata->ptrs; cur; cur = cur->next)
+ wl_pointer_send_leave(cur->data, s, focus->sys->sfc);
+ for (list_t *cur = focus->sys->cdata->kbds; cur; cur = cur->next)
+ wl_keyboard_send_leave(cur->data, s, focus->sys->sfc);
+ if (focus->sys->xsfc)
+ xdg_surface_send_configure(focus->sys->xsfc, focus->w, focus->h,
+ &xstate_normal, get_serial());
+ }
+ if (win && win->sys->sfc && win->sys->cdata) {
+ printf("sys_focus - enter win=%p\n", win);
+ for (list_t *cur = win->sys->cdata->ptrs; cur; cur = cur->next)
+ wl_pointer_send_enter(cur->data, s, win->sys->sfc, x, y);
+ for (list_t *cur = win->sys->cdata->kbds; cur; cur = cur->next)
+ wl_keyboard_send_enter(cur->data, s, win->sys->sfc, &keys);
+ if (win->sys->xsfc)
+ xdg_surface_send_configure(win->sys->xsfc, win->w, win->h,
+ &xstate_active, get_serial());
+ }
+
+ /* Update focused window */
+ focus = win;