mirror of
https://github.com/labwc/labwc.git
synced 2026-04-12 08:21:13 -04:00
[fixup] add focus_next_exclusive_focus_layer()
This commit is contained in:
parent
1de37e37ea
commit
52ea9a8c0f
1 changed files with 30 additions and 3 deletions
33
src/layers.c
33
src/layers.c
|
|
@ -118,6 +118,35 @@ handle_output_destroy(struct wl_listener *listener, void *data)
|
||||||
wlr_layer_surface_v1_destroy(layer->scene_layer_surface->layer_surface);
|
wlr_layer_surface_v1_destroy(layer->scene_layer_surface->layer_surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
focus_next_exclusive_focus_layer(struct server *server)
|
||||||
|
{
|
||||||
|
struct seat *seat = &server->seat;
|
||||||
|
struct output *output;
|
||||||
|
wl_list_for_each(output, &server->outputs, link) {
|
||||||
|
for (int i = ARRAY_SIZE(output->layer_tree) - 1; i >= 0; i--) {
|
||||||
|
struct wlr_scene_tree *tree = output->layer_tree[i];
|
||||||
|
struct wlr_scene_node *node;
|
||||||
|
wl_list_for_each(node, &tree->children, link) {
|
||||||
|
struct lab_layer_surface *surface =
|
||||||
|
node_layer_surface_from_node(node);
|
||||||
|
struct wlr_scene_layer_surface_v1 *scene =
|
||||||
|
surface->scene_layer_surface;
|
||||||
|
if (scene->layer_surface->current.keyboard_interactive
|
||||||
|
== ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE) {
|
||||||
|
seat_set_focus_layer(seat, scene->layer_surface);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* If not next exclusive-focus layer-surface exists, just clear focus */
|
||||||
|
if (seat->focused_layer) {
|
||||||
|
seat_set_focus_layer(seat, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
exclusive_focus(struct seat *seat)
|
exclusive_focus(struct seat *seat)
|
||||||
{
|
{
|
||||||
|
|
@ -165,9 +194,7 @@ process_keyboard_interactivity(struct lab_layer_surface *layer)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE:
|
case ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE:
|
||||||
if (seat->focused_layer) {
|
focus_next_exclusive_focus_layer(layer->server);
|
||||||
seat_set_focus_layer(seat, NULL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue