ウィンドウまたはフルスクリーンのウィンドウに描画するアプリケーションを作成したいのですが、マウスをつかんで、Alt + TabなどのWMキーボードショートカットを傍受することはありません。また、ユーザーが出入りするたびに通知を受ける必要があります。集中。
Google Chrome、Firefox、gnome-terminalなどの一般的なアプリケーションは、これを問題なく処理できます(F11でフルスクリーンになりますが、Alt + Tabは引き続き使用できます)が、マウスをつかむことはありません。
SDLは、このユースケースの扱いが悪いことで有名です。SDL_WM_GrabInputはマウスを取得しますが、WMショートカットもインターセプトします。SDL_FULLSCREENは、それ自体で何らかの自動グラブを備えているようです(理由は聞かないでください)。
解決策は自分でAlt+Tabのコードを書くことかもしれませんが、これはうまくいきません(そして、別のワークスペースに変更するなど、他のWMショートカットには役立ちません)。
もう1つの解決策は、SDL_WM_GrabInputを呼び出さずに、グラブを偽造することです。マウスポインターを(SDL_ShowCursorを使用して)非表示にし、ユーザーが移動するたびに中央に戻します。これは醜いですが、実際には機能します。もちろん、SDL_FULLSCREENは自動的に取得されるため、SDL_FULLSCREENは除きます(正常な実装とは異なります)。フルスクリーン対応のSDLソリューションはこれですが、それでも私が望んでいることではありません。グラブを有効または無効にするためのハックは必要ありません。マウスをグラブしたいのですが、キーボードをグラブしたくありません。
だから私はSDLに夢中になっていて、代替案を見たいと思っています。SDLを使いたいのですが、必須ではありません。
この質問は、SDLが実際に行うことはXGrabKeyboardを使用することであることを指摘しているようです。マニュアルページを読んでも、キーボードをつかまなくてもマウスをつかむことができるかどうかはすぐにはわかりません(私はXlibを自分で使用したことはありません)。
GTK(つまり、Alt + Tabに対応した、gnome-terminalの種類)を使用して「偽のフルスクリーン」を作成する方法を知っています。これを行うことと、マウスを非表示にして中央に戻すこと(「偽のグラブ」)を組み合わせることでうまくいくと思いますが、これはダクトテープが多すぎるように感じます。もっと簡単な方法があるはずです。(また、依存関係としてGTKを追加したくありませんが、生のXlib呼び出しを行うことが良い考えかどうかもわかりません)。
これに対する良い解決策は何ですか?
Linux / X11ソリューションが必要ですが、クロスプラットフォームであると便利です。これはWindowsでスムーズに解決できることを知っているので、これを正確に実行するライブラリがあるかもしれません。(また、私はOpenGLでレンダリングしますが、これは関係ありません)
PS:おそらく私はこの問題についてよく理解しておらず、正しい質問をしていないので、私が検討していないアプローチを自由に指摘してください。