#include #include "types.h" void focus_toplevel(struct absinthe_toplevel *toplevel) { if (!toplevel) return; struct absinthe_server *server = toplevel->server; struct wlr_seat *seat = server->seat; struct wlr_surface *prev_surface = seat->keyboard_state.focused_surface; struct wlr_surface *surface = toplevel->xdg_toplevel->base->surface; if (surface == prev_surface) return; if (prev_surface) { struct wlr_xdg_toplevel *prev_toplevel = wlr_xdg_toplevel_try_from_wlr_surface(prev_surface); if (prev_toplevel) wlr_xdg_toplevel_set_activated(prev_toplevel, false); } struct wlr_keyboard *keyboard = wlr_seat_get_keyboard(seat); wlr_scene_node_raise_to_top(&toplevel->scene_tree->node); wl_list_remove(&toplevel->link); wl_list_insert(&server->toplevels, &toplevel->link); wlr_xdg_toplevel_set_activated(toplevel->xdg_toplevel, true); if (keyboard) wlr_seat_keyboard_notify_enter(seat, surface, keyboard->keycodes, keyboard->num_keycodes, &keyboard->modifiers); }