Skip to content

[BUG] get_layer_surface not called with NULL when output not set #230

@vecchioBlister

Description

@vecchioBlister

Software used

Alpine Linux edge 3.23.0_alpha20250612 on Linux 6.12.40-1-lts
riverwm 0.3.11
tofi 0.9.1

Description of the bug

When leaving the output option unset in the config file, tofi should appear on the output that "the compositor decides", but in my setup, the chosen output is completely unpredictable (doesn't seem to depend on cursor position, focused window or focused tag).

When using WAYLAND_DEBUG=1 t seems that get_layer_surface is called with NULL for the "dummy" namespace, but then with a random(?) output for the "launcher" namespace.

STDERR output

With the config set to

output = ""

I ran this command multiple times, while using sleep time to move the cursor and focus between the outputs (which had no predictable effect):

sleep 1 && WAYLAND_DEBUG=1 tofi-drun 2>&1 | grep get_layer_surface
[ 591042.565] {Default Queue}  -> zwlr_layer_shell_v1#8.get_layer_surface(new id zwlr_layer_surface_v1#16, wl_surface#3, nil, 0, "dummy")
[ 591045.600] {Default Queue}  -> zwlr_layer_shell_v1#8.get_layer_surface(new id zwlr_layer_surface_v1#21, wl_surface#20, wl_output#12, 3, "launcher")
[ 606355.035] {Default Queue}  -> zwlr_layer_shell_v1#8.get_layer_surface(new id zwlr_layer_surface_v1#16, wl_surface#3, nil, 0, "dummy")
[ 606358.144] {Default Queue}  -> zwlr_layer_shell_v1#8.get_layer_surface(new id zwlr_layer_surface_v1#21, wl_surface#20, wl_output#12, 3, "launcher")
[ 636045.274] {Default Queue}  -> zwlr_layer_shell_v1#8.get_layer_surface(new id zwlr_layer_surface_v1#16, wl_surface#3, nil, 0, "dummy")
[ 636048.655] {Default Queue}  -> zwlr_layer_shell_v1#8.get_layer_surface(new id zwlr_layer_surface_v1#21, wl_surface#20, wl_output#12, 3, "launcher")
[ 804879.427] {Default Queue}  -> zwlr_layer_shell_v1#8.get_layer_surface(new id zwlr_layer_surface_v1#16, wl_surface#3, nil, 0, "dummy")
[ 804882.752] {Default Queue}  -> zwlr_layer_shell_v1#8.get_layer_surface(new id zwlr_layer_surface_v1#21, wl_surface#20, wl_output#12, 3, "launcher")

After many attempts, including disconnecting and reconnecting the external monitor, I managed to have it display on the other output:

[1811622.926] {Default Queue}  -> zwlr_layer_shell_v1#8.get_layer_surface(new id zwlr_layer_surface_v1#15, wl_surface#3, nil, 0, "dummy")
[1811626.040] {Default Queue}  -> zwlr_layer_shell_v1#8.get_layer_surface(new id zwlr_layer_surface_v1#20, wl_surface#19, wl_output#11, 3, "launcher")

When output is set to a specific one, it works properly:

[2092025.828] {Default Queue}  -> zwlr_layer_shell_v1#8.get_layer_surface(new id zwlr_layer_surface_v1#16, wl_surface#3, wl_output#11, 0, "dummy")
[2092029.678] {Default Queue}  -> zwlr_layer_shell_v1#8.get_layer_surface(new id zwlr_layer_surface_v1#21, wl_surface#20, wl_output#11, 3, "launcher")

Steps to reproduce

  1. have multiple outputs
  2. do not specify any output in tofi's config file
  3. launch tofi with a keyboard shortcut
  4. (optionally) execute with WAYLAND_DEBUG=1 to verify the call to get_layer_surface

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions