2009-03-02 20 views
3

我創建了一個使用XCreateWindow創建窗口的程序。這對我的系統和其他很多人來說都是完美的,但在很多情況下,這會造成一些奇怪的問題。例如我從中得到的ID與啓動程序的終端ID衝突。在這種情況下,gnome-terminal的窗口ID也是0x2400001(父是root),我的程序的窗口ID也是0x2400001(它的父節點也是root)。有什麼建議可能會出錯?XCreateWindow提供了一個與已有窗口衝突的窗口ID

+1

請您詳細說明您如何獲取終端的窗口ID?另外一個代碼片段,勾畫你正在做的事情可能會有所幫助。 – EFraim 2009-03-03 06:42:11

回答

0

窗口ID的大概只有每一個連接到X服務器內是唯一的(即連接到X服務器可以得到相同的窗口ID不同的進程和X服務器使用的連接,窗口ID給他們內部分開)。我認爲X對窗口ID沒有任何承諾,例如,它們在流程或其他任何方面都是唯一的,所以最好不要嘗試將它們用於任何其他目的。

我也不會感到驚訝地看到X實現,只是回連續的數字作爲窗口的ID開始用相同的值(例如1)爲每個連接,這可以解釋你的經驗,例如每個客戶端中的第一個窗口似乎在該X實現上具有相同的窗口標識。

+1

窗口ID在X顯示中是唯一的。否則,X客戶端將無法引用彼此的窗口。 – daf 2011-06-23 16:22:53

0

Xserver爲每個窗口創建一個唯一的不透明標識。 您用於識別窗口ID的方法可能是錯誤的。

你的問題是一個不同問題的症狀。 你真的想解決什麼問題?

+0

窗口ID由X客戶端生成,而不是由X服務器生成。 – daf 2011-06-23 16:23:18

0

除了其他答案:運行xwininfo -root -all(閱讀更多信息的手冊頁)。檢查gnome-terminal窗口ID和你的應用程序的窗口ID。