layer: use scene-graph API more fully

...and thus simplify the usage of wlr_scene_node_at(). Specifically:

- desktop.c: in get_cursor_context() use node-description for
  layer-surfaces and layer-popups. This lays the foundations for a
  pointer-enter-event being sent when a new layer-surfaces appears under
  the pointer (even if the pointer doesn not move).

- layers.c:

  * Iterate over `struct wlr_scene_tree *layer_tree[]` rather than
    `struct wl_list layers[]` when arranging layers to avoid surfaces
    being out of sync with nodes

  * Set signal handlers after scene node creation to avoid configure
    race conditions

  * Handle scene-node destroy event rather than event of
    `struct wlr_layer_surface_v1`

  * Arrange layers on map and unmap

  * Handle client request for layer-change

Fixes issue #667
This commit is contained in:
Johan Malm 2022-12-22 21:58:55 +00:00 committed by Consolatis
parent e39fd341ec
commit 9dbac2e06f
3 changed files with 108 additions and 90 deletions

View file

@ -11,7 +11,7 @@ struct lab_layer_surface {
struct wl_list link; /* output::layers */
struct wlr_scene_layer_surface_v1 *scene_layer_surface;
struct wl_listener destroy;
struct wl_listener node_destroy;
struct wl_listener map;
struct wl_listener unmap;
struct wl_listener surface_commit;