fix: layer shell + view bugs

- fix bug that causes layer shell seat focus incorrect on layer windows
- focus on a regular view now raises all views of the related applications on top of the output
This commit is contained in:
DL
2025-06-13 17:51:38 +02:00
parent 4c289d28da
commit 8d84d04d9c
5 changed files with 98 additions and 23 deletions

13
layer.c
View File

@ -89,11 +89,10 @@ static void layer_surface_commit(struct wl_listener *listener, void *data)
* enter a new/moved/resized layer surface.
*/
// cursor_update_focus(layer->server);
diyac_cursor_focus(layer->server);
//diyac_cursor_focus(layer->server);
}
}
static void
layer_surface_unmap(struct wl_listener *listener, void *data)
static void layer_surface_unmap(struct wl_listener *listener, void *data)
{
struct diyac_layer_surface *layer = wl_container_of(listener, layer, unmap);
struct wlr_layer_surface_v1 *layer_surface =
@ -104,7 +103,7 @@ layer_surface_unmap(struct wl_listener *listener, void *data)
}
struct diyac_seat *seat = &layer->server->seat;
if (seat->focused_layer == layer_surface) {
diyac_seat_focus_layer(seat, NULL);
diyac_seat_focus_layer(seat, NULL);
}
}
@ -131,11 +130,7 @@ static void layer_surface_node_destroy(struct wl_listener *listener, void *data)
struct diyac_layer_surface *layer =
wl_container_of(listener, layer, node_destroy);
/*
* TODO: Determine if this layer is being used by an exclusive client.
* If it is, try and find another layer owned by this client to pass
* focus to.
*/
diyac_seat_focus_layer(&layer->server->seat, NULL);
wl_list_remove(&layer->map.link);
wl_list_remove(&layer->unmap.link);