wayland中如何实现透明窗口的事件穿透?

软件和网站开发以及相关技术探讨
回复
头像
LinuxLin365
帖子: 11
注册时间: 2023-12-05 11:14

wayland中如何实现透明窗口的事件穿透?

#1

帖子 LinuxLin365 » 2023-12-05 11:39

在x11中可以通过XShapeCombineRegion(display, window_xid, ShapeInput, 0, 0, region, ShapeSet);实现透明窗口的鼠标穿透,但是在wayland中没有生效。

在wayland中有没有类似的办法?
头像
astolia
论坛版主
帖子: 6452
注册时间: 2008-09-18 13:11

Re: wayland中如何实现透明窗口的事件穿透?

#2

帖子 astolia » 2023-12-06 9:49

如果是自己的程序,自己把事件转发一下。如果想搞别人的程序,建议先去了解一下wayland的架构,之后选择当中间人还是搞hook随你
头像
LinuxLin365
帖子: 11
注册时间: 2023-12-05 11:14

Re: wayland中如何实现透明窗口的事件穿透?

#3

帖子 LinuxLin365 » 2023-12-06 17:20

astolia 写了: 2023-12-06 9:49 如果是自己的程序,自己把事件转发一下。如果想搞别人的程序,建议先去了解一下wayland的架构,之后选择当中间人还是搞hook随你
是想实现一个屏幕水印(全屏透明窗口+鼠标穿透),程序在x11运行正常,在wayland中不可用;
你说的事件转发有类似的资料吗?我搜了一下没找到
头像
astolia
论坛版主
帖子: 6452
注册时间: 2008-09-18 13:11

Re: wayland中如何实现透明窗口的事件穿透?

#4

帖子 astolia » 2023-12-07 9:55

如果你稍微了解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也是要依赖一个特定的扩展,不知道你的代码里考虑过这一点没有。
LinuxLin365 写了: 2023-12-06 17:20 程序在x11运行正常,在wayland中不可用;
x11程序在wayland上运行是运行在xwayland里,你可以把xwayland当成是个远程桌面一样的东西。你对远程桌面(xwayland)上的东西再怎么搞也影响不到本机(原生wayland)
LinuxLin365 写了: 2023-12-06 17:20 你说的事件转发有类似的资料吗?我搜了一下没找到
这要啥资料。你在程序的消息循环里收到了针对窗口A的消息,改改相对坐标之类的东西交给窗口B处理。当然在wayland里不如直接在窗口B的缓冲区上画东西。
回复