2009-03-02 6 views
3

XCreateWindowを使用してウィンドウを作成するプログラムを作成しました。これは私のシステムと他の多くのシステムでは完全に動作しますが、多くの場合、それはいくつかの奇妙な問題を引き起こしています。例えば私がそこから取得したIDは、プログラムが起動された端末のIDと衝突します。そのような場合、gnome-terminalはウィンドウIDが0x2400001(親はroot)で、私のプログラムのウィンドウIDも0x2400001です(親もrootです)。何が間違っているかもしれないと示唆していますか?XCreateWindowは、既存のウィンドウと衝突するウィンドウIDを返します。

+1

端末のウィンドウIDをどのように取得したらいいですか?また、あなたがやっていることをスケッチするコードスニペットが役に立つかもしれません。 – EFraim

答えて

0

ウィンドウIDは、おそらくXサーバーへの各接続内で一意です(つまり、Xサーバーに接続する異なるプロセスが同じウィンドウIDを取得し、Xサーバーが接続ANDウィンドウIDを使用して内部的に区切ります)。

私はXがウィンドウIDについて約束をしていないと思います。それらはプロセスや何かを問わず一意であるため、他の目的のために使用しない方がよいでしょう。

各接続ごとに同じ値(例:1)で始まる連続する数値をウィンドウIDとして返すX実装があり、これはあなたの経験を説明するものではありません。すべてのクライアントの最初のウィンドウは、そのX実装で同じウィンドウIDを持つように見えます。

+1

ウィンドウIDは、Xディスプレイで一意です。そうしないと、Xクライアントはお互いのウィンドウを参照できなくなります。 – daf

0

Xserverは、すべてのウィンドウに対して一意の不透明IDを作成します。 ウィンドウIDを特定するために使用しているメソッドが間違っている可能性があります。

あなたの質問は、別の問題の症状です。 あなたは本当に解決しようとしている問題は何ですか?

+0

ウィンドウIDは、Xサーバーではなく、Xクライアントによって生成されます。 – daf

0

その他の回答に加えて、xwininfo -root -allを実行してください(詳細は、マニュアルページを参照してください)。 gnome-terminalウィンドウIDとアプリケーションのウィンドウIDを確認してください。

関連する問題