我正在为 Gnome 3.4 开发一个 gnome shell 扩展。如果任何可编辑的文本被聚焦/聚焦,我的扩展程序需要捕获窗口事件。
global.stage.connect('notify::focus-key', Lang.bind(this, this._myHandler));
对我不起作用。
这是一个简单的用例:每当用户单击 firefox 搜索框时,我都希望运行我的处理程序。
谢谢你的帮助,
我正在为 Gnome 3.4 开发一个 gnome shell 扩展。如果任何可编辑的文本被聚焦/聚焦,我的扩展程序需要捕获窗口事件。
global.stage.connect('notify::focus-key', Lang.bind(this, this._myHandler));
对我不起作用。
这是一个简单的用例:每当用户单击 firefox 搜索框时,我都希望运行我的处理程序。
谢谢你的帮助,
塞尔丘克向我指出了这个问题,所以为了在此处回答这个问题以供将来搜索。
允许设置全局桌面侦听器以关注更改的库是 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 放大镜(使用 javascript 的小尺寸示例)或 Orca(GNOME 屏幕阅读器,大尺寸示例,使用 pyatspi2)上添加的焦点/插入符号跟踪功能。
libatspi 参考这里:https ://developer.gnome.org/libatspi/
gnome-shell 放大镜代码在这里:https ://git.gnome.org/browse/gnome-shell/tree/js/ui/magnifier.js
你不能做这个。
应用程序文本输入小部件不属于窗口管理器的范围,因此您无法访问它们的内容,或者它们是否获得焦点。