切换到 Wayland 会修复无法从关闭的窗口粘贴吗?

Kno*_*ube 4 xorg clipboard wayland

我最近读到 Xorg 是如何导致臭名昭著的错误的,在该错误中,用户在关闭窗口后无法从窗口复制和粘贴。而且我也知道计划最终切换到Wayland 作为 X 的替代品

如果这个bug是X造成的,X会被Wayland代替,那到时候有没有可能修复?我很好奇这在技术上是否可行,以及目前是否在计划中。

Ser*_*gey 5

好吧,我不认为这是一个错误,而是一个具有一些意想不到的后果的功能:) 此外,我的理解是其他“剪贴板管理器”,即在WindowsMacOS X 中,以非常相似的方式工作 -当执行复制操作时,应用程序只是通知剪贴板管理器 - “嘿,我有东西”而不传递实际数据(尽管在上面提到的操作系统中,应用程序可以物理地将数据存储在剪贴板中 - XWindow 将其留给“剪贴板管理器”,这是一个单独的应用程序)。

如果您认为复制的数据在粘贴之前通常需要从一种格式转换为另一种格式,那么这样做的原因就很清楚了。示例:您从发布程序复制文本框架并将其粘贴到同一个程序中 - 结果保留了文本框架大小、边框、转换等。然后将相同的内容粘贴到文本处理器中 - 结果是一些文本具有丰富的格式,但显然文本框架属性丢失了,因为文本处理器对此一无所知。然后将相同的内容粘贴到文本编辑器中 - 结果只是没有任何格式的纯文本。

现在,它是如何工作的?发布程序的专有数据格式如何转换为文本处理器理解的内容或仅转换为纯文本?显然,转换不能由 X 服务器完成,因为它对所有可能的数据格式一无所知,而且接收应用程序也不能出于同样的原因进行转换。

我对这个过程的理解是,当某些东西被复制时,应用程序会通知剪贴板管理器它可以提供数据的格式:“嘿,我有一些东西可以转换成我的专有格式,富文本或纯文本”。

其他应用程序然后检查剪贴板中是否有它理解的格式的任何内容:

if (clipboad.contains_data_in_formats("image", "rich text", "plain text")) {
    enable_Paste_menu_item();
}
Run Code Online (Sandbox Code Playgroud)

Then, when Paste action is selected, the end result is that the source application is asked to provide the data in the required format.

当应用程序退出时,标准说它可以将数据保存在剪贴板管理器中:

If a client needs to exit while owning the CLIPBOARD selection, 
it should request the clipboard manager to take over the ownership 
of the clipboard, using the SAVE_TARGETS mechanism. If there is no 
clipboard manager, or if the SAVE_TARGETS conversion fails, the 
application should simply exit.
Run Code Online (Sandbox Code Playgroud)

所以,我的理解是,应用程序有责任保存数据。因此,Wayland 不太可能在这方面有所改进:)

  • 这里有一个类似的解释:https://bugs.launchpad.net/ubuntu/+bug/11334/comments/231 (2认同)
  • [我*不*认为 Windows 是这样工作的。](http://msdn.microsoft.com/en-us/library/windows/desktop/ms649016(v=vs.85).aspx#_win32_Copying_Information_to_the_Clipboard)它向剪贴板提供它希望数据可用的每种格式的数据。 (2认同)