2009-07-10 68 views
2

在嵌入式Linux系統中,我試圖顯示關閉通知,應該在關閉時覆蓋任何其他窗口。現在創建窗口不是問題,但可靠地顯示窗口。 X服務器或WM太忙了,無法每次都繪製通知。考慮到我們有限的CPU功率,這並不奇怪。使用XGrabServer獲取X服務器

因此,我想通過使用gdk_x11_grab_server()(它在默認顯示中調用XGrabServer)來抓取X服務器,我將使WM/X變得容易。但是,我應該何時調用抓取函數?如果我在構建窗口之前調用它,之前在我的窗口暴露事件中顯示我的窗口或事件,則屏幕上沒有畫任何東西(即使在空載測試中)!

documentation說:

的XGrabServer功能禁用一個比 這個請求到達其他所有的連接請求,並關閉起伏 的 處理。

我想這將意味着只有來自我的應用程序的請求才會被處理,但似乎並非如此,因爲如果X被我的應用程序佔用,則什麼都不繪製。

那麼,如何以及何時應該抓住X服務器來實現想要的結果,或者是完全錯誤的工具,我誤解了使用(或嘗試使用它過高的水平,它的工作真)。

回答

0

您不應該跟進XUngrabServer的調用,以便X服務器恢復處理請求嗎?所有其他連接已被關閉,因爲您調用了XGrabServer,但您顯然需要處理請求才能繼續,因爲您要在連接上發出請求。

2

我猜想沒有什麼東西正在繪製,因爲你打開了一個普通的頂層窗口,在這種情況下,窗口管理器需要在它可見之前對其進行操作;不過你通過調用XGrabServer()來鎖定窗口管理器。

您可以嘗試在窗口上設置OverrideRedirect,它告訴X服務器窗口管理器根本不應該與此窗口有關。這也有從窗口中刪除任何裝飾(標題欄,關閉按鈕等)的效果,這很可能是您想要關閉通知的東西。