On Monday, November 18, 2019 1:37 PM, Guillermo Rodriguez 
<guillerodriguez....@gmail.com> wrote:

> Hello,
>
> I am writing a Wayland client that acts as an OSD "overlay" on top of
> another application. This OSD overlay should not handle any pointer
> events -- these should "pass through" and be handled by the
> application below.
>
> From the docs, wwl_surface::set_input_region looked promising:
>
> > Input events happening outside of this region will try the next surface in 
> > the server surface stack. The compositor ignores the parts of the input 
> > region that fall outside of the surface. [...] The initial value for an 
> > input region is infinite. That means the whole surface will accept input. 
> > Setting the pending input region has copy semantics, and the wl_region 
> > object can be destroyed immediately. A NULL wl_region causes the input 
> > region to be set to infinite.
>
> I am trying this:
>
> struct wl_region* region =
> wl_compositor_create_region(_glfw.wl.compositor);
> wl_surface_set_input_region(window->wl.surface, region);
>
>         wl_region_destroy(region);
>
>
> However it doesn't seem to work -- pointer events do not seem to "pass 
> through".
>
> Same problem is also reported here: https://github.com/glfw/glfw/pull/1568
>
> Is this approach correct? Any hints on how to debug this?

This should work. Other clients do this, for instance swaybg [1].

This is probably a GNOME bug. I'd suggest trying on other compositors
(KDE, Weston, Sway, …) and report a GNOME bug if it only happens on
GNOME.

[1]: https://github.com/swaywm/swaybg/blob/master/main.c#L271

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to