【问题标题】:GNOME-Shell: How to close ModalDialog with Escape keyGNOME-Shell:如何使用 Escape 键关闭 ModalDialog
【发布时间】: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
  • oekey-press-event 信号的回调参数,命名非常简洁。 o 是接收信号的对象(与newEntry 相同的对象),e 是正在生成的 Clutter.Event:gjs-docs.gnome.org/clutter7/…
  • 请注意,对于此事件,您应该返回 false 以传递关键事件,如果您已处理它,则返回 true。

标签: javascript gnome gjs


【解决方案1】:

尝试去here.你可以检查键盘事件代码。

【讨论】:

  • 感谢您的帮助,但这不是我想要的。您提出了一个适用于浏览器的解决方案,但 GJS 不适用于浏览器,它是 GNOME JS,这是适用于 GNOME-Shell。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
相关资源
最近更新 更多