2011-04-27 23 views
14

我正在嘗試編寫窗口管理器。 (其實,我編寫的操作系統和編譯器,但這是題外話。)編寫窗口管理器的現代方法

XLIB和XCB不完全討厭的,至少不是,比方說,win32的標準,但他們肯定是很老並且不適合體面的抽象,讓我的生活更輕鬆。不僅如此,現代高級語言還缺乏良好的綁定。

我的問題是:這些日子真的需要這些低級別的東西嗎?圖書館是否存在,將封裝我所有的討厭的東西?我有一個模糊的記憶,啓蒙人們做了這樣的事情,但找不到任何東西。或者像GDK這樣的現代小部件庫有足夠的功能,我不需要觸摸Xlib層?

與Java綁定的所有庫都特別感興趣的......

+0

不錯的問題。你不只是需要逐像素渲染功能?可能有一些技巧,但這就是我開始的方式。 – Blender 2011-04-27 22:23:14

+0

我會看kwin,metacity,compiz和/或啓示。就我而言,我喜歡低級別,只看WM使用原始Xlib完成。幸運的是,Havoc Pennington會注意到這個問題:) – ninjalj 2011-04-27 23:01:34

+0

Haskell擁有像樣的X11綁定,用於編寫窗口管理器Xmonad。 – wnoise 2011-04-27 23:26:58

回答

4

這是一個遲到的答案,噸有很多相關性了,但我會張貼它無論如何因爲其他人可能正在尋找它...

我問自己同樣的問題,並得出結論,存在沒有這樣的事情,特別是不在Java 。儘管某些小部件工具包(如qt)爲您提供了使用現有顯示結構並從現有xlib窗口句柄創建小部件的可能性,但您仍然必須使用xlib/xcb來完成與X服務器通信的討厭工作wm具體操作。正如其他人所說的其他圖書館,如GDK和啓蒙,也提供了基本抽象的相當不錯的工作。

儘管如此,我並不滿意這些事實,即所有這些都使用C/C++並坐在懶惰的屁股上,等到有人在Java中爲我做的工作不是一種選擇時,我開始編寫自己的庫它允許您使用Java構建自己的模塊化WM。 https://github.com/Zubnix/trinityshell

+0

我很感興趣看到這個。現在我沉浸其他東西,但我一定會看看未來。讓我們知道您的身體情況如何! – 2013-02-04 21:36:48

9

是所有這種低層次的東西真的有必要,這些天?

如果通過「低級別的東西」,你的意思是C語言,那麼否,從技術的角度來看這是不必要的;您可以使用XCB的XML爲任何語言生成綁定。但是,如果通過「低級別的東西」,你的意思是處理X協議級別,那麼,是的,這是必要的(如果你不想拉你的頭髮)。窗口管理器必須在X11協議級別上工作,所以使用「高級別」只會讓你的生活變得困難。事實上,XCB的誕生正是因爲Xlib太高級了,掩蓋了太多的底層,所以很容易犯錯誤,並且很難或者不可能完全控制。 (另外,從X的角度來看,XCB並不是「非常古老」;只是在過去的幾年裏,所有主要的Linux發行版才最終開始全面使用XCB)。

+1

很好的答案。最好的高層次方法可能是從現有的WM開始。另外,一個選項可能是在使用JavaScript時遵循gnome-shell。如果您有其他語言,XCB和gobject-introspection都會爲您提供自動化語言綁定的工具。 – 2011-04-29 03:04:33

+0

順便說一句,因爲未來的方向是WM也必須作爲CM工作,總的來說這有點火箭科學,我認爲使用gnome-shell的C部分並交換JavaScript部分(或多或少),如果你的目標是一個替代的用戶界面。用戶界面的決定應該主要在JS中,但是舊的metacity位和混亂的C位中的繪製循環和低級gunge。 – 2011-04-29 12:30:01

+1

我非常不同意:除了特別的窗口管理器事件和XGrabKey()之外,窗口管理器似乎並沒有太多特別的異常。事實上,自從我發佈我的問題以來,我一直在使用gdk進行黑客攻擊,並且*非常接近*做了很多我想要的;我有幾乎完全從GdkWindow域管理窗口的代碼(以非常原始的方式)。唉,它不做的事情是非常討厭的。特別是,gdk用鍵盤輸入做了很奇怪的事情,如果XInput可用,將會忽略KeyPress和KeyRelease。猜猜XGrabKey()發送了哪些事件?對。 – 2011-05-01 20:53:02