3

Gnome 3.4 用の gnome シェル拡張を開発しています。編集可能なテキストがフォーカスイン/アウトされている場合、拡張機能はウィンドウイベントをキャプチャする必要があります。

global.stage.connect('notify::focus-key', Lang.bind(this, this._myHandler));

私にはうまくいきませんでした。

簡単な使用例を次に示します。ユーザーが Firefox の検索ボックスをクリックするたびに、ハンドラーを実行したいと考えています。

助けてくれてありがとう、

4

2 に答える 2

6

Selcuk は私にこの質問を指摘したので、今後の検索のためにここで回答を得るために。

グローバル デスクトップ リスナーを設定して変更をフォーカスできるようにするライブラリは、libatspi (GNOME アクセシビリティ フレームワークのクライアント側ライブラリ) です。C、pyatspi2 (python 手動バインディング)、または gobject-introspection ベースのバインディング (つまり、javascript) を直接使用できます。したがって、フォーカスが変更されるたびに、フォーカスされたオブジェクトの name:role_name を出力する小さな JavaScript プログラムは次のようになります。

const Atspi = imports.gi.Atspi;

function onChanged (event) {
    log(event.source.get_name() + ',' + event.source.get_role_name());
}

Atspi.init();
let atspiListener = Atspi.EventListener.new(onChanged);
atspiListener.register("object:state-changed:focused");
Atspi.event_main();

いずれにせよ、コード例については、最近追加された gnome-shell magnifier (javascript を使用した小さいサイズの例) または Orca (GNOME スクリーン リーダー、大きいサイズの例、pyatspi2 を使用) に追加されたフォーカス/キャレット トラッキング機能を参照できます。

libatspi リファレンスはこちら: https://developer.gnome.org/libatspi/

gnome-shell magnifier コードはこちら: https://git.gnome.org/browse/gnome-shell/tree/js/ui/magnifier.js

于 2013-11-04T15:38:22.930 に答える
0

これはできません。

アプリケーションのテキスト入力ウィジェットはウィンドウ マネージャーの範囲に含まれないため、そのコンテンツにアクセスしたり、フォーカスを受け取ったかどうかに関係なくアクセスできません。

于 2013-10-15T22:19:48.087 に答える