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

时间:2013-10-15 18:13:19

标签: event-handling gnome clutter gnome-shell-extensions

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

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

对我不起作用。

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

感谢您的帮助,

2 个答案:

答案 0 :(得分:6)

塞尔丘克向我提出了这个问题,所以为了将来这个问题回答这个问题。

允许设置全局桌面侦听器以集中更改的库是libatspi(GNOME可访问性框架的客户端库)。您可以直接使用C,pyatspi2(python手动绑定)或基于gobject-introspection的绑定(即javascript)。因此,每次焦点更改时,都会打印一个小的javascript程序:焦点对象的role_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();

在任何情况下,对于代码示例,您可以查看最近在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

答案 1 :(得分:0)

你不能这样做。

应用程序文本输入窗口小部件不属于窗口管理器的范围,因此您无法访问其内容,也无法获得焦点。