在X(* nix)上实现剪贴板功能而无需访问事件循环?

时间:2011-10-20 20:26:30

标签: c linux api

如果你有一个窗口但没有访问事件循环的话,是否可以实现文本的复制粘贴,并且只能对X进行函数调用。我在Windows和OSX上实现了剪贴板,除了API函数调用之外什么也没有。在带有X的* nix上是否可以相同?我被告知你绝对需要访问X事件循环。有没有办法只用api调用来实现基本的字符串剪贴板功能?

1 个答案:

答案 0 :(得分:3)

简短回答是“不”。

以下答案很长......

Windows和X剪贴板(不了解OSX)之间的主要区别在于:

  • 在Windows中,当用户执行COPY时,数据被复制到一块共享内存中,并且可用于任何执行PASTE的应用程序。
  • 在X中,当应用程序执行COPY时,只需拥有剪贴板。然后,当另一个应用程序(或相同的)执行PASTE时,数据将从一个应用程序传输到另一个应用程序。

因此,为了在X客户端中实现COPY,您必须首先拥有剪贴板,然后侦听并回复获取剪贴板内容消息。要实现PASTE,您必须发送获取剪贴板内容消息并等待回复。这两个操作都要求你搞乱事件循环。

这就是为什么在X中杀死源应用程序后复制的数据不可用。除非您使用某种剪贴板服务器,即侦听剪贴板事件所有者的应用程序正在死亡并保存数据的副本以供将来粘贴。

公平地说,Windows剪贴板也可以在直接传输模式下工作,但它很少使用,AFAIK,只适用于非常大的数据。