【发布时间】:2021-04-24 19:39:59
【问题描述】:
我不是程序员,我只是在学习。我正在尝试使用 GJS 和 GNOME-Shell-extensions 作为示例来学习 javascript。我正在尝试构建一个扩展,它有一个带关闭按钮的 ModalDialog。从按钮关闭一切都没有问题,但我想添加使用 Escape 键关闭它的功能。 在代码中我有一个这样的信号处理程序
this.connect('key-press-event', () => {
但至少杀了我,我不明白如何处理这个信号。我在这里看到了几个类似的问题,并且我以不同的方式尝试了答案选项,但是我有一个错误或未定义的错误,帮助我,我的头爆炸了。请向我解释我需要如何使用“按键事件”。
我找到了这样的解决方案并且它有效。前提是有一个用于输入文本的字段并且它处于焦点之下。这里的诀窍是 Clutter 是要遵循的。 Clutter 是一个垃圾堆。
global.stage.set_key_focus(newEntry);
newEntry.connect('key-press-event', (o, e) => {
const symbol = e.get_key_symbol();
if (symbol === Clutter.KEY_Escape) {
log('what you need');
this._closeDialog();
}
else {
log('Not growth again' );
}
});
以下是我无法理解的三件事。为什么第一行(焦点)对我不起作用,对其他人起作用,“o”和“e”是什么,get_key_symbol()方法从何而来?
【问题讨论】:
-
我不认为我知道你所有问题的答案,但 get_key_symbol() 是 Clutter.Event 的一种方法:gjs-docs.gnome.org/clutter7/clutter.event#method-get_key_symbol
-
o和e是key-press-event信号的回调参数,命名非常简洁。o是接收信号的对象(与newEntry相同的对象),e是正在生成的 Clutter.Event:gjs-docs.gnome.org/clutter7/… -
请注意,对于此事件,您应该返回 false 以传递关键事件,如果您已处理它,则返回 true。
标签: javascript gnome gjs