サブメニューを有効にするとキーボードショートカットが機能しないのはなぜですか?

サブメニューを有効にするとキーボードショートカットが機能しないのはなぜですか?

右クリックサブメニュー(デスクトップ、アイコン/ファイル、パネルなど)が有効になっていると、キーボードショートカット(たとえばCtrl+ Alt+)またはマルチメディアキー(再生/一時停止など)は機能しません。T同様に、gmusicbrowser、qpdfview、Libreofficeなどのアプリケーションで右クリックメニューを開くと機能しません(それぞれ試してはいけません)。パネルアイコンをタップしてパネルでサブメニューを開くか、Thunarでサブメニュー(編集など)を開くと機能しません。

なぜこれですか?直感的に、これはアクティビティサブメニューが「ショートカットを聞く」という「システム」機能を無効にするためです。これは正しいですか?厳密に言えば、これはシステムの「監視機能」の制限ではありませんか?

奇妙に(?)、Firefoxの右クリックメニューが開いていると、これは発生しません。

ベストアンサー1

この効果は次のとおりです。X Windowsでキャッチ。 Fedora 25でWaylandデスクトップを実行すると、XWaylandのXアプリケーションにもこの効果はありません。 ㅏKDEエラーWaylandを使用するために、この問題に関連する問題は終了しました。

技術的にインポートを使用するかどうかは、使用されるGUIツールキット/ウィジェット(またはXと直接通信する場合はアプリケーション)によって異なります。多くのGUIツールキットは、メニューが開いたときにXキャッチを使用します。しかし、理由これとFirefoxがこれを回避する方法は多少曖昧に見えます。

Xスクレイピングのもう1つの用途は、ゲームやネストされたデスクトップ(リモートアクセスや仮想マシンなど)です。この回答が最初に書かれたとき、Waylandは必要なキーボードイベントを取得する方法をサポートしていませんでした。[1][2]。したがって、XWaylandスクレイピングがどのように処理されるか、つまりXWaylandスクレイピングが再び説明する特定の効果を持ち始めるかどうかは不明です。 Fedora 27のテストではそうではありませんでした。


スタックオーバーフロー入力フォーカスを子ウィンドウに設定するよりも、入力キャプチャを使用することは、ウィンドウマネージャがメインウィンドウのタイトルバーを「非アクティブ」色で再描画するのを防ぐ唯一の方法です。

この問題について私が見つけることができる最も「公式な」ソースはバグレポートです。明らかに、Xを使ってメニューをインポートするのは長い問題です。最後まで読んで、上記のウィンドウマネージャの問題を解決するための提案を見ることができます。おそらくそれがFirefoxがすることでしょう。

(考えてみると、もともとデスクトップ環境では、グローバルキーボードショートカットがそれほど重要かどうかはわかりません。


Qtメニューポップアップがキーボードとポインタをつかみ、ユーザーがシステムショートカット(スクリーンショットなど)を使用できないようにします。

ポップアップメニューを実装するためにX11が提供するメカニズムは、グローバルキーボードとマウスキャッチです。 Qtを含むすべての最新のアプリケーションとツールキットはこのメカニズムを使用します。残念ながら、非常に深刻な動作変更(ユーザーエクスペリエンスにも害を及ぼす可能性がある)を適用せずにこれを変更する方法はありません。


特定のメニューを開くと画面がロックされません。

ミシェルはこの質問にこう答えました。http://bugs.debian.org/514036


--8<-- ミシェルダンジグ

これは本当です。ポインタがメニューの外にあるときにメニューが入力イベントを受け取る唯一の方法です。 AFAIK これはかなり深いX11設計の問題なので、簡単に修正できないようです。それでも自由にアップストリームに持っていってください。

--8<--

いいね情報ありがとうございます。私はこれを上流に報告しました。

http://bugs.freedesktop.org/show_bug.cgi?id=19946


ツールキットでよく行われますが、アクセスキー付きのメニューを実装するためにキーボードキャッチが実際に必要かどうかはわかりません。

メニューウィンドウにイベントを配信するという点で便利です。

ただし、ほとんどの場合、メインアプリケーションウィンドウにフォーカスがあるため、アプリケーションはそこからキーボードイベントを受け取ることができます。

何らかの理由でクライアントがメインウィンドウで通常フォーカスを受け取らない場合は、キーボードキャッチを盗むのではなく、キーボードフォーカス(おそらくグローバルアクティブ入力モデルで)をネゴシエートする必要があるかどうかを知りたいです。クライアントはグラブを解放します。


ポインタをキャッチすると、画面上の他の場所をクリックしてメニューを「クリック」するのに役立ちますが、実際にクリックした要素をトリガーしません。しかし、ウィキペディアでは、キーボードを持たずにポインタをキャッチすることが可能だと言います。 /

おすすめ記事