2013-10-02 57 views
0

我試圖使用xcb庫實現基本的窗口管理器。xcb:如何啓動應用程序並將其顯示到窗口中

我設法與X服務器連接,並抓取一些事件,但我無法計算如何啓動應用程序並在當前X會話中顯示它。

我試圖按照XCB教程: http://xcb.freedesktop.org/tutorial/

基本上我認爲(和probaly我錯了),一旦會話開始,我的「窗口管理器」,如果我想發動應用程序,我只需要叉它,並啓動應用程序,所以例如:

int child = fork(); 
if(child==0) { 
    printf("Child"); 
    execve("/usr/bin/xterm", NULL, NULL); 
} 

但似乎沒有工作。

我沒有太多的代碼顯示,因爲我只是想修改上面粘貼的教程中的代碼(我添加了一個無限循環,以及其他一些東西)。

那麼如何啓動一個像xterm,pcmanfm這樣的x應用程序並在當前x會話中顯示它呢?

而我如何能在新窗口中繪製應用程序?

而最後一個問題: 我試圖複製和粘貼X教程的hello world窗口示例,但似乎沒有加載任何窗口。代碼在這裏: http://www.x.org/releases/X11R7.7/doc/libxcb/tutorial/index.html#helloworld

回答

1

您不要「在新窗口中繪製應用程序」 - 您只需啓動一個進程併爲其自身創建一個窗口。檢查您的過程是否正確設置了DISPLAY變量。

要管理窗口,您需要在根窗口上設置SubstructureRedirect掩碼並響應來自(新)應用程序窗口的子結構/地圖請求通知。

+0

好吧,我用execve解決了這個問題(路徑是錯誤的,並且有一個與鼠標按鈕的鍵綁定,我沒有注意到),但第二部分是有用的,所以我更好地理解xcb如何工作。現在我還有另外一個問題,如果我想在窗戶周圍畫一個裝飾,我必須在這些事件中的一箇中進行裝飾。哪個更好? – Ivan

+0

大多數WM爲標題欄/框架創建新窗口,並將應用程序窗口作爲框架窗口的子窗口。查看我的簡單WM示例,如果尚未重新設置,則在MapRequest事件處理程序中進行重新佈局 - https://github.com/sidorares/node-x11/blob/master/examples/windowmanager/wm.js –

相關問題