【问题标题】:is clipboard implemented by xlib or to be implemented by individual applications剪贴板是由 xlib 实现还是由单个应用程序实现
【发布时间】:2013-11-04 05:44:02
【问题描述】:

ICCCM 定义了三个选择 1) 主要 2) 次要 3) 剪贴板。但是在 xlib 中,xatom.h 只定义了 XA_PRIMARY 和 XA_SECONDARY 但剪贴板没有这样的原子。所以我的疑问是剪贴板是由 xlib 实现的,还是必须由主要和辅助等单个应用程序实现?

如果它必须由单个应用程序实现,不同的应用程序将如何与剪贴板交互,就像从一个应用程序的窗口复制并粘贴到另一个应用程序的窗口......?不同的应用程序如何共享一个公共缓冲区?任何人都可以帮助在linux中实际实现剪贴板..吗?我经历了这个 link 。但是我找不到很多关于实现的信息。

【问题讨论】:

  • 你为什么要问?不使用现有的工具包是一种巨大的时间浪费;您需要多年的工作才能制作自己的作品,而且不会比现有的更好。如果现有的工具包不能满足您的需求,最好扩展它(通过编写一些额外的小部件)而不是从头开始重写!
  • 我不是自己做的,我只是想知道剪贴板的实现。我必须开发一个小应用程序。 @BasileStarynkevitch
  • 然后,看看现有的实现。因此,如果使用 Qt,请查看 Qt 的源代码(以及示例的源代码)。大多数工具包都提供了一个 API 来处理剪贴板,例如QClipboard 这样的 API 对你来说真的很重要。
  • 如果没有实现自己的工具包,您使用的是哪个工具包?这很重要,因为答案取决于实践中的工具包。有关更多信息,请参阅我的更新答案...

标签: linux clipboard x11 xlib icccm


【解决方案1】:
bash $ xlsatoms | fgrep CLIPBOARD
231     CLIPBOARD
bash $ fgrep -r XA_CLIPBOARD /usr/include/X11
/usr/include/X11/Xmu/Atoms.h:    _XA_CLIPBOARD,
/usr/include/X11/Xmu/Atoms.h:#define XA_CLIPBOARD(d)            XmuInternAtom(d, _XA_CLIPBOARD)

所以我们有一个原子,这没问题。你也可以按名字实习。

CLIPBOARD 选择的实现方式与其他选择完全相同。唯一的区别是选择所有权被断言的那一刻。对于 PRIMARY,它在用户选择某些东西时被断言;对于 CLIPBOARD,它是用户剪切或复制的时间。

【讨论】:

  • 感谢您的回答。你能帮忙看看 gcc 的 xmu 的编译器和链接器选项吗?我已包含 X11/Xmu/Atoms.h,但它表示未定义引用 _XA_CLIPBOARD @n.m.
【解决方案2】:

剪贴板必须X11 server 内部实现(工具包中有很多支持代码),因为它是所有 X11 客户端共享的数据。

它由ICCCMEWMH 约定定义,并与desktop environment 相关。它可能会使用一些未预定义但通常命名为 X11 的原子(xatom.h 中未预定义许多此类常规原子)。

您最好使用一些现有的工具包,例如 Qt 或 Gtk(或 FOX 或 FLTK)。它们是免费软件,如果你真的想的话,你可以看看里面。对于 Qt,查看 QClipboard,对于 GTK,查看 GtkClipboard。所以你并不真正关心使用哪些原子和 X11 协议来实现它们。

freedesktop.org 有很多资源,例如this,或者wm-spec等等等等等等……

另请参阅 X Windows selectionX Windows System protocol and architectureXDND 上的维基页面并阅读 X11 protocol 规范。

【讨论】:

    猜你喜欢
    • 2016-09-08
    • 2017-08-21
    • 1970-01-01
    • 2016-08-18
    • 2012-05-31
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 2010-10-03
    相关资源
    最近更新 更多