处理gnome shell扩展中的窗口焦点事件

The*_*hog 3 gnome event-handling clutter gnome-shell-extensions

我正在为Gnome 3.4开发一个gnome shell扩展.如果任何可编辑文本聚焦在/进出,我的扩展需要捕获窗口事件.

global.stage.connect('notify::focus-key', Lang.bind(this, this._myHandler));
Run Code Online (Sandbox Code Playgroud)

不适合我.

这是一个简单的用例:每当用户点击firefox搜索框时,我都希望运行我的处理程序.

谢谢你的帮助,

小智 6

塞尔丘克向我指出了这个问题,所以为了将来这里的答案用于未来的搜索.

允许设置全局桌面侦听器以集中更改的库是libatspi(GNOME可访问性框架的客户端库).您可以直接使用C,pyatspi2(python手动绑定)或基于gobject-introspection的绑定(即javascript).所以一个小的javascript程序在每次焦点更改时打印名称:focus_name的焦点对象:

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();
Run Code Online (Sandbox Code Playgroud)

在任何情况下,对于代码示例,您可以查看最近在gnome-shell放大镜(使用javascript的小型示例)或Orca(GNOME屏幕阅读器,大型示例,使用pyatspi2)上添加的焦点/插入符跟踪功能.

libatspi参考:https://developer.gnome.org/libatspi/

gnome-shell放大镜代码:https://git.gnome.org/browse/gnome-shell/tree/js/ui/magnifier.js