有哪些优秀的Xlib编程指南?

8
我对Xlib编程有点困惑。几周前我开始使用轻量级窗口管理器dwm,并希望获取一些Xlib编程书籍或在线资源来自定义dwm。
然而,经过在网上搜索后,我没有看到太多关于Xlib的新文章?亚马逊上最新的X窗口系统编程指南是1994年的?这是因为旧书已经足够好,还是因为有一些新技术我不知道?或者,可能我没有用正确的关键词搜索网络。如果是这种情况,可以请有经验的人指导我吗?

4
X 是相当陈旧的技术。现代 UNIX/Linux 图形界面开发采用 QT 或 GTK+(或其他几种工具包)。不要浪费时间在 Xlib 上编程。最多花一天时间学习它,然后学习使用 Xlib 实现的 GTK 或 Qt。 - user132014
1个回答

16

据我所知,没有最新的书籍可供参考。你只需要阅读一些规范和源代码。幸运的是,它并不那么复杂。

我建议阅读gtk+/gdk/x11(GTK的X后端)和你喜欢的几个窗口管理器的源代码。ICCCM和EMWH规范是必不可少的。

自旧指南以来X编程发生了巨大变化,因为现在没有人再喜欢使用许多用于绘制、字体、打印等的服务端设施了。所以XDrawFoo函数、与字体有关的所有内容、XPrint、GCs、颜色映射表等都已经过时或基本上已经过时了。现在通常使用如Cairo或Skia之类的库在客户端进行绘制。

然而那些旧书中关于窗口和像素映射以及X工作方式的基本信息仍然是准确的。

如果你正在处理窗口管理器(WM),以下是一些好的一般性X建议:

  • 你需要响应事件而不是获取状态。例如,始终将你的大小视为你最后一次收到ConfigureNotify事件的大小;不要调用XGetGeometry之类的函数来获取你的大小。获取状态会有两个问题:它会导致性能下降(等待一个往返会死亡)并且引入竞争条件。

  • 在WM中,你正在处理其他应用程序的窗口,它们可以随时被销毁,这将导致如果你正在触摸该窗口则出现错误。因此,您在窗口上调用的任何函数都可能失败。

  • 永远不要使用CurrentTime,而是使用一个真实的时间戳,否则你会创建出怪异的竞争条件 bug,让你发狂。

我想还有很多其他的技巧,但这三个足以让你避免常见的错误了;-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接