Gtk Gnome 3.10和3.14中的扩展事件循环

Gtk Gnome 3.10和3.14中的扩展事件循环,gtk,gnome,event-loop,gnome-shell-extensions,gjs,Gtk,Gnome,Event Loop,Gnome Shell Extensions,Gjs,我写了这个可访问性扩展: 这与GNOMeShellV3.14和v3.16中的设想一样,但在v3.10中不起作用。它仅显示i之后的初始键盘修改器状态 重新启动它,之后再也不更新它 以下是完整的代码: const St = imports.gi.St; const Mainloop = imports.mainloop; const Main = imports.ui.main; const Gdk = imports.gi.Gdk let button, label, keymap;

我写了这个可访问性扩展:

这与GNOMeShellV3.14和v3.16中的设想一样,但在v3.10中不起作用。它仅显示i之后的初始键盘修改器状态 重新启动它,之后再也不更新它

以下是完整的代码:

const St = imports.gi.St;
const Mainloop = imports.mainloop;
const Main = imports.ui.main;
const Gdk = imports.gi.Gdk

let button, label, keymap;

function _update() {
    let symbols = "⇧⇬⋀⌥①◆⌘⎇";
    let state = keymap.get_modifier_state();    
    label.text = " ";
    for (var i=0; i<=8; i++ ) { 
        if (state & 1<<i) {
            label.text += symbols[i];
        } else {
            //label.text += "";
        }
    }
    label.text += " ";
}

function init() {
    button = new St.Bin({ style_class: 'panel-button',
                          reactive: false,
                          can_focus: false,
                          x_fill: true,
                          y_fill: false,
                          track_hover: false });

    label = new St.Label({ style_class: "state-label", text: "" });
    button.set_child(label);

    keymap = Gdk.Keymap.get_default();
    keymap.connect('state_changed',  _update );
    Mainloop.timeout_add(1000, _update );
}

function enable() {
    Main.panel._rightBox.insert_child_at_index(button, 0);
}

function disable() {
    Main.panel._rightBox.remove_child(button);
}
const St=imports.gi.St;
const Mainloop=imports.Mainloop;
const Main=imports.ui.Main;
const Gdk=imports.gi.Gdk
let按钮、标签、按键图;
函数_update(){
让符号=”⇧⇬⋀⌥①◆⌘⎇";
让state=keymap.get_修饰符_state();
label.text=“”;

对于(var i=0;i假设注释掉keymap的定义是有意的,请检查它是否仍在代码中的其他位置赋值。您是否尝试使用-(减号)而不是(下划线)了?大多数事件在JS空间中使用前者,而不是后者,在我将事件附加到更改活动工作区的一些情况下,这一直是我的问题,Meta.Display的后端触发
工作区切换
,GJS空间通过
工作区切换
进行连接,还有更多这里有一些例子


关于官方文档,包括GJS空间内的正确事件、属性和功能名称,请参阅我不知道它何时正式发布,但他们声明它是

谢谢,我会尽快回复。@user.dz在devdocs.baznga.org上进行简单检查,您可以检查d GNOME将其作为官方文档平台。它声明,从GDK 2.16开始,事件
GDK.state-changed()
被触发,并发出
::state changed
信号
let c,button, label, keymap;
c=0;

function _update() {
    Gtk.main_iteration_do(false);
    c++;
    let symbols = "⇧⇬⋀⌥①◆⌘⎇";
    //let keymap = Gdk.Keymap.get_default()
    let state = keymap.get_modifier_state();
    label.text = " ";
    for (var i=0; i<=8; i++ ) {
        if (state & 1<<i) {
            label.text += symbols[i];
        } else {
            //label.text += "";
        }
    }
    label.text += " "+c+" ";
    return true;
}