首页 > 解决方案 > 将“点击”信号连接到指标

问题描述

我按照以下教程为 shell 3.36 编写了一个 PanelMenu.Button 派生类:

https://wiki.gnome.org/Projects/GnomeShell/Extensions/Writing

一切正常(在我必须做一些与 3.36 相关的调整之后),但现在我希望单击左键显示/隐藏应用程序并单击右键打开菜单。为此,我想捕捉一个“点击”信号,但 PanelMenu.Button 只发出menu-set. 我需要这样的东西:

indicator.connect("clicked", () => GLib.spawn_command_line_async("my_app"));

是否有支持“点击”信号的小部件?

标签: javascriptgnome-shellgnome-shell-extensions

解决方案


我认为寻找另一个小部件可能比它的价值更多。如果你看这里的实现,它们实际上只是覆盖了eventvfunc 来打开菜单。

vfunc_event(event) {
    if (this.menu &&
        (event.type() == Clutter.EventType.TOUCH_BEGIN ||
         event.type() == Clutter.EventType.BUTTON_PRESS))
        this.menu.toggle();

    return Clutter.EVENT_PROPAGATE;
}

如果您已经对自己进行了子类化并且不需要菜单,则只需像这样重新定义虚函数即可简单地做类似的事情(只需将其像常规函数一样放入您的子类中):

vfunc_event() {
    if ((event.type() == Clutter.EventType.TOUCH_BEGIN ||
         event.type() == Clutter.EventType.BUTTON_PRESS))
        GLib.spawn_command_line_async("my_app");

    return Clutter.EVENT_PROPAGATE;
}

但是,您可能希望将事件更改为BUTTON_RELEASETOUCH_END因此当用户释放按钮时会发生这种情况,让他们有机会通过拖动鼠标来改变主意。


推荐阅读