我目前正在编写一个供Wayland客户端软件使用的库。该库主要旨在独立于客户端工具箱(目前仅Qt,但其他启用了Wayland的工具箱也应能够使用它)。它仅需要传递到初始化例程的wl_display
指针,即可从GUI工具包中检索该例程。初始化完成后,该库应该能够在不接触工具箱的情况下工作,以使其跨工具箱兼容。
当我的库需要几个全局对象代理(即wl_output
)时,就会出现问题。该库使用自定义wl_registry
将自定义代理绑定到所需的全局对象。但是,从服务器的角度来看,这些对象的所有代理都是等效的。服务器发送包含对象代理的事件时,它们可能包含工具箱或库的代理引用。这导致了问题,因为没有简单的方法可以区分这些问题。当工具包接收到此类事件时,它会盲目地假定代理的用户数据属于该工具包并使用它,即使它收到的代理属于我的库也是如此。
有什么方法可以调和这些无关的代码,或者这种用法超出了Wayland库/协议的范围,我应该重新设计解决方案吗?
答案 0 :(得分:0)
Qt Wayland开发人员在这里。
当工具包接收到此类事件时,即使它接收到的代理属于我的库,它也会盲目地认为代理的用户数据属于该工具包并使用它。
您确定这部分吗?当您绑定到全局对象时,您将创建一个新的代理对象,但我不知道该工具包如何了解这一点……或者您是在讨论全局变量发送的事件中的参数。即wl_pointer.set_cursor
之类的?如果您可以更详细地说明出了什么问题,那将是很好的...