如何在不相关的代码部分之间共享Wayland显示连接

时间:2019-03-01 19:20:16

标签: wayland

我目前正在编写一个供Wayland客户端软件使用的库。该库主要旨在独立于客户端工具箱(目前仅Qt,但其他启用了Wayland的工具箱也应能够使用它)。它仅需要传递到初始化例程的wl_display指针,即可从GUI工具包中检索该例程。初始化完成后,该库应该能够在不接触工具箱的情况下工作,以使其跨工具箱兼容。

当我的库需要几个全局对象代理(即wl_output)时,就会出现问题。该库使用自定义wl_registry将自定义代理绑定到所需的全局对象。但是,从服务器的角度来看,这些对象的所有代理都是等效的。服务器发送包含对象代理的事件时,它们可能包含工具箱或库的代理引用。这导致了问题,因为没有简单的方法可以区分这些问题。当工具包接收到此类事件时,它会盲目地假定代理的用户数据属于该工具包并使用它,即使它收到的代理属于我的库也是如此。

有什么方法可以调和这些无关的代码,或者这种用法超出了Wayland库/协议的范围,我应该重新设计解决方案吗?

1 个答案:

答案 0 :(得分:0)

Qt Wayland开发人员在这里。

  

当工具包接收到此类事件时,即使它接收到的代理属于我的库,它也会盲目地认为代理的用户数据属于该工具包并使用它。

您确定这部分吗?当您绑定到全局对象时,您将创建一个新的代理对象,但我不知道该工具包如何了解这一点……或者您是在讨论全局变量发送的事件中的参数。即wl_pointer.set_cursor之类的?如果您可以更详细地说明出了什么问题,那将是很好的...