加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

gtk – Gnome 3.10与3.14中的扩展事件循环

发布时间:2020-12-15 22:33:17 所属栏目:安全 来源:网络整理
导读:我写了这个辅助功能扩展: https://extensions.gnome.org/extension/975/keyboard-modifiers-status/ https://github.com/sneetsher/Keyboard-Modifiers-Status 这与Gnome Shell v3.14 v3.16但不是v3.10.它显示了i之后唯一的初始键盘修饰符状态 重新启动它,
我写了这个辅助功能扩展:

> https://extensions.gnome.org/extension/975/keyboard-modifiers-status/
> https://github.com/sneetsher/Keyboard-Modifiers-Status

这与Gnome Shell v3.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);
}

试图调试,我修改了代码来显示(状态标签一个计数器)

let c,button,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;
}

我可以证实这些:

> keymap.connect(‘state_changed’,_ update};这个信号永远不会升起
>超时回调效果很好
>标签已更新并显示初始状态&递增计数器

所以我认为事件循环有一些东西,因为它没有拉动
状态更新或不处理其事件.

你能指点我解决这个问题吗?有什么区别
在v3.10&之间v3.14?

解决方法

假设注释掉keymap的定义是有意的,请检查它是否仍然在代码中的其他地方分配.你尝试过使用 – (减号)而不是_(下划线)吗?大多数事件在JS空间中使用前者,而不是后者,在我将事件附加到更改活动工作空间的几种情况下,这对我来说是个问题,其中Meta.Display的后端触发workspace_switched,GJS空间通过工作空间切换连接,那里有更多的例子.

有关官方文档,包括GJS空间内的正确事件,属性和函数名称,请参阅GNOME DevDocs我不知道何时成为官方,但他们声明它是here

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读