layer shell
This commit is contained in:
+8
-23
@@ -7,27 +7,19 @@
|
||||
|
||||
/* arrange layers logic from dwl */
|
||||
|
||||
static void layer_arrange(absn_output *output, struct wl_list *list,
|
||||
struct wlr_box *usable_area, int exclusive)
|
||||
static void layer_arrange(absn_output *output, struct wl_list *list, struct wlr_box *usable_area, int exclusive)
|
||||
{
|
||||
absn_layer_surface *layer_surface;
|
||||
wl_list_for_each(layer_surface, list, link)
|
||||
{
|
||||
struct wlr_layer_surface_v1 *surface = layer_surface->wlr;
|
||||
|
||||
if (!surface->initialized) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (exclusive != (surface->current.exclusive_zone > 0)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
wlr_scene_layer_surface_v1_configure(layer_surface->scene_layer,
|
||||
&output->geom, usable_area);
|
||||
wlr_scene_node_set_position(&layer_surface->popups->node,
|
||||
layer_surface->scene_tree->node.x,
|
||||
layer_surface->scene_tree->node.y);
|
||||
wlr_scene_layer_surface_v1_configure(layer_surface->scene_layer, &output->geom, usable_area);
|
||||
wlr_scene_node_set_position(&layer_surface->popups->node, layer_surface->scene_tree->node.x, layer_surface->scene_tree->node.y);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,27 +51,20 @@ void layers_arrange(absn_output *output)
|
||||
ZWLR_LAYER_SHELL_V1_LAYER_TOP,
|
||||
};
|
||||
|
||||
int layers_above_shell_count =
|
||||
sizeof(layers_above_shell) / sizeof(layers_above_shell[0]);
|
||||
int layers_above_shell_count = sizeof(layers_above_shell) / sizeof(layers_above_shell[0]);
|
||||
absn_layer_surface *layer_surface;
|
||||
for (int i = 0; i < layers_above_shell_count; ++i) {
|
||||
wl_list_for_each_reverse(layer_surface,
|
||||
&output->layers[layers_above_shell[i]], link)
|
||||
wl_list_for_each_reverse(layer_surface, &output->layers[layers_above_shell[i]], link)
|
||||
{
|
||||
if (!layer_surface->wlr->current.keyboard_interactive ||
|
||||
!layer_surface->mapped) {
|
||||
if (!layer_surface->wlr->current.keyboard_interactive || !layer_surface->mapped) {
|
||||
continue;
|
||||
}
|
||||
|
||||
unfocus_toplevel(output->server->focused_toplevel);
|
||||
output->server->exclusive_focus = layer_surface;
|
||||
struct wlr_keyboard *keyboard =
|
||||
wlr_seat_get_keyboard(output->server->seat);
|
||||
struct wlr_keyboard *keyboard = wlr_seat_get_keyboard(output->server->seat);
|
||||
if (keyboard) {
|
||||
wlr_seat_keyboard_notify_enter(
|
||||
output->server->seat, layer_surface->wlr->surface,
|
||||
keyboard->keycodes, keyboard->num_keycodes,
|
||||
&keyboard->modifiers);
|
||||
wlr_seat_keyboard_notify_enter(output->server->seat, layer_surface->wlr->surface, keyboard->keycodes, keyboard->num_keycodes, &keyboard->modifiers);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user