1

問題: Linux システムの Window Manager C++ ファイルで、XWindows によって制御される Java ウィンドウがあります。HCI をおよそ 7 ~ 35 回連続して (そしてすばやく) 開くと、通常、ウィンドウが設定した場所 (430, 300 )。失敗した後、HCI を閉じて再度開くと、バグが発生する前と同じように、正しい場所で開かれます。属性は最初に XMoveResizeWindow で設定されます。

(XTranslateAttributes と XGetWindowAttributes を介して) HCI の場所を確認し、X と Y を設定された場所と比較し、一致しない場合は属性をリセットするループを追加しました。

ただし、属性を印刷すると、ウィンドウが実際に (0,0) で開いていても (430, 300) と表示されます。

具体的な質問: これは XWindows のバグですか? 属性が 1 つのものを読み取ることは意味がありますが、実際の場所とは一致しません (つまり、これらの属性は要求ではなく提案である可能性があります)。HCI のより正確な位置を返す別の方法はありますか?

更新:ループを変更して、XMoveWindow を介して場所を 15 回続けて移動しようとしました。修正されたようです(まだテストは行われていません)。しかし、力ずくよりも良い方法があるはずです。

4

1 に答える 1

1

ウィンドウの位置などを変更しようとする前に、ウィンドウが実際に認識されるまで待つ必要があります。SubstructureRedirectMask をマスクするイベント ハンドラーを追加し、イベント タイプが XMapRequestEvent の場合、イベント ハンドラーで XMoveResizeWindow を呼び出してみてください。

于 2016-02-15T17:50:22.370 に答える