8

我现在对 Xlib 编程有点困惑。几周前我开始使用 dwm(一个轻量级的窗口管理器),我想拿起一些 Xlib 编程书籍或在线资源来定制 dwm。

然而,在网上搜索之后,我没有看到太多关于 Xlib 的新文章?亚马逊上最新的 X 窗口系统编程指南是 1994 年!?是因为旧书够用,还是因为有一些我不了解的新技术而没有Xlib的新文章?或者,也许我没有在网络上搜索的正确关键字。如果是这样的话,有人可以指点我正确的地方吗?

4

1 回答 1

16

我所知道的没有任何最新的书籍。你真的只需要阅读一堆规范和源代码。幸运的是它没有那么复杂。

我想说阅读 gtk+/gdk/x11 的源代码(GTK 的 X 后端)和你最喜欢的几个 WM 的源代码会有很长的路要走。ICCCM 和 EMWH 规范是必不可少的。

自旧指南以来,X 编程的一个巨大变化是,没有人喜欢再使用许多服务器端工具来进行绘图、字体、打印等。所以 XDrawFoo 函数,关于字体、XPrint、GC、颜色图的一切,所有这些都或多或少地过时了。现在绘图通常在客户端完成,例如 Cairo 或 Skia。

不过,那些旧书中关于窗口和像素图以及 X 工作的基本方式的内容仍然是准确的。

如果您正在使用 WM,请提供一些很好的通用 X 建议:

  • 您需要响应事件而不是获取状态。例如,始终将您的尺码视为您获得 ConfigureNotify 的最后一个尺码;不要调用 XGetGeometry 或其他东西来获取您的尺寸。获取状态有两个问题:它会扼杀性能(阻塞往返 = 性能死亡),它会引入竞争条件。

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

  • 永远不要使用 CurrentTime,总是使用真正的时间戳,否则你会创建怪异的比赛条件错误,这会让你发疯

我猜还有更多提示,但这些提示可以帮助您开始避免常见错误;-)

于 2010-07-23T02:03:32.343 回答