微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在gnome shell扩展中处理键盘事件?

如何添加事件或其他方法来监听gnome shell扩展上的按键?例如显示一个对话框,每个按键显示按下的键?

我找不到任何例子。 documentation提到了一个键盘模块,但是用这个常用名称搜索很难。

Class explanation
...
- General utils
   - Keyboard: Manage and define the keyboard events,etc. for gnome shell.

(在上面作为上面链接的文档的引用阅读。它被设置为代码样式,因为由于某种原因引用样式不保留此站点中的换行符)

我找到了一些使用波纹管代码的扩展,其结果类似于我的要求,但我再次找不到特定类和方法的文档:

workViewInjections['_init'] = injectToFunction(WorkspacesView.WorkspacesView.prototype,'_init',function(width,height,x,y,workspaces) {
        this._pickWorkspace = false;
        this._pickWindow = false;
        this._keyPressEventId = global.stage.connect('key-press-event',Lang.bind(this,this._onKeyPress));                                                                                
        this._keyreleaseEventId = global.stage.connect('key-release-event',this._onkeyrelease));
        connectedSignals.push({ obj: global.stage,id: this._keyPressEventId });
        connectedSignals.push({ obj: global.stage,id: this._keyreleaseEventId });
        });

此外,没有任何一个名为键盘的类…

edit1:更多搜索……我想我可能不得不使用clutter api。但同样,没有太多的例子或文件。我去的最远的是这个

edit2:更多搜索。在主ui树上查看gnome shell源代码,我认为答案是使用扩展代码可用的全部提到的全局对象。例如

global.connect(‘key-press-event’,function(if,i,kNow,the,signature){});

我前段时间在gcampaxgtk-js-app template中遇到过这个片段,这可能与你正在做的事情有关:
// Due to limitations of gobject-introspection wrt GdkEvent and GdkEventKey,// this needs to be a signal handler
this.connect('key-press-event',this._handleKeyPress));

_handleKeyPress: function(self,event) {
    return this.main_search_bar.handle_event(event);
},

我还没有必要使用键盘事件,这是GJS中的Gtk,但同样的限制可能会影响gnome-shell扩展。

UPDATE

我最近一直在做一些键绑定的东西,如果将信号处理程序附加到全局对象是有效的,你可以这样做:

global.display.connect("key-press-event",(widget,event,user_data) => {
    let [success,keyval] = event.get_keyval(); // integer
    let keyname = Gdk.keyval_name(keyval); // string keyname

    if (keyname === "Control_L") {
        // Dialog code or eg. this.keys_array.push("<Ctrl>");
    }
});

还有一些Shell keybinding code here和一些shell-global documentation here可能会给你更多的线索。希望我能帮助更多,但我正在摔跤自己的GJS atm;)

附录

一个带有信息记录的示例类的good answer here,以及一个推测性的解释。我还发现这个功能在DBus上公开,在某些情况下可能更方便:

总线名称:org.gnome.Shell – >路径:/ org / gnome / Shell – >接口:org.gnome.Shell

相关方法

> GrabAccelerator(字符串加速器,UInt32标志) – > (UInt32动作)
> UngrabAccelerator(UInt32动作) – > (布尔成功)

信号:

> AcceleratorActivate(UInt32,{String,Variant}的字典)

原文地址:https://www.jb51.cc/bash/387208.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐