在x11中可以通过XShapeCombineRegion(display, window_xid, ShapeInput, 0, 0, region, ShapeSet);实现透明窗口的鼠标穿透,但是在wayland中没有生效。
在wayland中有没有类似的办法?
wayland中如何实现透明窗口的事件穿透?
- LinuxLin365
- 帖子: 11
- 注册时间: 2023-12-05 11:14
- astolia
- 论坛版主
- 帖子: 6569
- 注册时间: 2008-09-18 13:11
Re: wayland中如何实现透明窗口的事件穿透?
如果是自己的程序,自己把事件转发一下。如果想搞别人的程序,建议先去了解一下wayland的架构,之后选择当中间人还是搞hook随你
- LinuxLin365
- 帖子: 11
- 注册时间: 2023-12-05 11:14
- astolia
- 论坛版主
- 帖子: 6569
- 注册时间: 2008-09-18 13:11
Re: wayland中如何实现透明窗口的事件穿透?
如果你稍微了解wayland,就应该知道它是一组协议,而非一个具体的实现。要做水印,可以利用layer shell协议扩展,比如像 https://github.com/Kljunas2/activate-linux 这样。不过有一个问题,它目前还没有被wayland正式接纳 https://gitlab.freedesktop.org/wayland/ ... equests/28 ,所以不是所有的wayland compositor都实现了这个协议,在没有实现layer shell协议的compositor上就无法用这个方案实现水印效果,比如wayland compositor的参考实现weston。
话说回来,XShapeCombineRegion也是要依赖一个特定的扩展,不知道你的代码里考虑过这一点没有。
话说回来,XShapeCombineRegion也是要依赖一个特定的扩展,不知道你的代码里考虑过这一点没有。
x11程序在wayland上运行是运行在xwayland里,你可以把xwayland当成是个远程桌面一样的东西。你对远程桌面(xwayland)上的东西再怎么搞也影响不到本机(原生wayland)
这要啥资料。你在程序的消息循环里收到了针对窗口A的消息,改改相对坐标之类的东西交给窗口B处理。当然在wayland里不如直接在窗口B的缓冲区上画东西。