编写窗口管理器的现代方法

时间:2011-04-27 22:20:58

标签: x11 xlib window-managers

我正在尝试编写一个窗口管理器。 (实际上,我已经编写了一个操作系统和一个编译器,但这不是重点。)

XLib和xcb并不是完全令人讨厌,至少不是因为win32标准,但它们肯定是非常古老的,并且不能很好地利用体面的抽象来让我的生活更轻松。不仅如此,而且现代高级语言明显缺乏良好的绑定。

我的问题是:这几天所有这些低级别的东西真的很必要吗?是否存在能够为我封装所有令人讨厌的东西的库?我有一个模糊的记忆,启蒙人已经做过这样的事情,却找不到任何东西。或者像GDK这样的现代小部件库是否具有足够的功能,我不需要触及Xlib层?

任何具有Java绑定的库都特别有用......

2 个答案:

答案 0 :(得分:9)

  

这些天真的很需要所有这些低级别的东西吗?

如果“低级别的东西”是指C语言,那么不是,从技术的角度来看,没有必要;您可以使用XCB的XML为任何语言生成绑定。

然而,如果“低级别的东西”意味着在X协议级别进行交易,那么,是的,这是必要的(如果你不想拔掉头发)。窗口管理器必须在X11协议级别工作,因此使用“高级别”的东西只会让您的生活变得困难。事实上,XCB的创建恰恰是因为Xlib太高级,掩盖太多,所以很容易出错,并且很难或不可能完全控制。 (另外,从X的角度来看,XCB并不“非常老”;只是在过去的几年里,所有主要的Linux发行版最终才开始全面使用XCB。)

答案 1 :(得分:4)

这是一个迟到的答案,所以也许它不再具有太大的相关性,但我会发布它,因为其他人可能正在寻找它...

我问自己同样的问题并得出结论,没有这样的东西,特别是在Java中。虽然某些小工具工具包(如qt)为您提供了使用现有显示结构并使用现有xlib窗口句柄创建小部件的可能性,但您仍然必须使用xlib / xcb来完成与X服务器通信的讨厌工作wm具体操作。正如其他人所说的其他库,如GDK和enlightenment也提供了相当好的基本抽象。

尽管如此,我对所有这些使用C / C ++并坐在我懒惰的屁股上等待直到有人在Java中为我工作不是一个选项的事实感到不满意,我开始编写我自己的库允许您使用Java构建自己的模块化WM。 https://github.com/Zubnix/trinityshell