0

2 つのモニターを作成しました。2 つのウィンドウを作成しました。それらを別のモニターに移動して、フルスクリーンにしました。ウィンドウにフォーカスがある間、すべての予約済みの「ストラット」(呼び出されていると思います) がカバーされます。ただし、ウィンドウにフォーカスがない場合、背面からの「支柱」がウィンドウの上に表示されます。

とにかく、ウィンドウを一時的に一番上にする方法はありますか (すべての支柱の上であっても)。ウィンドウが常に一番上になるように設定しています。

4

1 に答える 1

1

「ウィンドウをフルスクリーンにする」ということは、アトム_NET_WM_STATEにクライアントメッセージを送信したことを意味すると思います。_NET_WM_STATE_FULLSCREEN

そのため、この要求はウィンドウ マネージャーによって完全に処理されます。これには、要求を受け入れるか拒否するかだけでなく、「フルスクリーン」が何を意味するか、つまり、フルスクリーンにもかかわらず他のクライアントが表示されるかどうか、またはどの時点で表示されるかをウィンドウマネージャーが決定できることも意味します (ただし、仕様では確かにその方法が明確になっています)。フルスクリーンを解釈する必要があります)。

肝心なのは、あなたのウィンドウは依然として管理されたウィンドウであり、あなた自身のウィンドウは常に独自のことをしたいのですが、個々のクライアントの希望を他のすべてのものと比較検討するのはウィンドウマネージャーの責任です (そして、より重要なことに、ウィンドウマネージャーの権利です)。 .

簡単に言えば、いいえ、仕方がありません。実際、全画面表示の要求はすでに完全に拒否されている可能性があり、それで問題ありません。ここでウィンドウマネージャが決定したことに対処する責任があります。

とはいえ、ウィンドウをリダイレクトしないように選択することもできます。つまり、管理対象外にすることもできます。ウィンドウにすることでこれを行うことができますがoverride_redirect、管理されていないということは、装飾がないこと、ウィンドウマネージャーとのやり取りがないことなども意味します。

とにかく、管理されていないウィンドウを上げても、構成要求は発生しなくなり、X サーバーによって単に受け入れられるようになります。参照man XRaiseWindow:

ウィンドウの override-redirect 属性が False で、他のクライアントが親で SubstructureRedirectMask を選択した場合、X サーバーは ConfigureRequest イベントを生成し、処理は実行されません。それ以外の場合は、ウィンドウが上がります。

もちろん、ウィンドウ マネージャ (または他のクライアント) はこれに気付くことができ、別のウィンドウを再度表示することで反応する可能性があります (可能性は低いですが)。i3lock などのスクリーン ロッカーにはこの問題があり、それを解決する唯一の方法は、可視性イベントを自分でリッスンし、もう一度ウィンドウを上げることです。

一般的に、本当にこれをやりたいかどうかを再考します。ウィンドウ マネージャが提供したいフィーリングであると判断した場合は、それをいじってはいけません。フォーカスがない場合でも、ウィンドウが出力上で唯一の可視ウィンドウであることは本当に重要ですか?

于 2016-05-05T19:03:24.743 に答える