base
This commit is contained in:
+34
@@ -0,0 +1,34 @@
|
||||
#include <wayland-server-core.h>
|
||||
|
||||
#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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user