将 'clicked' 信号连接到指标
Connecting a 'clicked' signal to the indicator
我按照以下教程为 shell 3.36 编写了一个 PanelMenu.Button 派生的 class:
https://wiki.gnome.org/Projects/GnomeShell/Extensions/Writing
一切正常(在我必须做一些与 3.36 相关的调整之后)但现在我想左键单击 show/hide 应用程序并单击右键打开菜单。为此,我想捕捉一个 'clicked' 信号,但 PanelMenu.Button 只发出 menu-set
。我需要这样的东西:
indicator.connect("clicked", () => GLib.spawn_command_line_async("my_app"));
是否有支持'clicked'信号的小部件?
我认为寻找另一个小部件可能比它值得的工作更多。如果您查看 here 实现,它们实际上只是覆盖 event
vfunc 来打开菜单。
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_RELEASE
和 TOUCH_END
,以便在用户 释放 按钮时发生,给他们机会通过将鼠标拖走来改变他们的想法。
你试过了吗:
indicator.connect("button-press-event", () => GLib.spawn_command_line_async("my_app"));
您正在寻找的信号应该是:按钮按下事件。
单击一次鼠标左键将触发 按钮按下事件 。
这个信号对我有用。我的 GNOME shell 版本是:3.36.9
关于你的第二个问题:
show/hide 运行 应用程序的 window 是否有首选方法?
此 link 可能会对您有所帮助,或者至少希望能为您提供一些正确方向的指示:
https://github.com/amivaleo/Show-Desktop-Button/blob/master/extension.js
祝你好运!
我按照以下教程为 shell 3.36 编写了一个 PanelMenu.Button 派生的 class:
https://wiki.gnome.org/Projects/GnomeShell/Extensions/Writing
一切正常(在我必须做一些与 3.36 相关的调整之后)但现在我想左键单击 show/hide 应用程序并单击右键打开菜单。为此,我想捕捉一个 'clicked' 信号,但 PanelMenu.Button 只发出 menu-set
。我需要这样的东西:
indicator.connect("clicked", () => GLib.spawn_command_line_async("my_app"));
是否有支持'clicked'信号的小部件?
我认为寻找另一个小部件可能比它值得的工作更多。如果您查看 here 实现,它们实际上只是覆盖 event
vfunc 来打开菜单。
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_RELEASE
和 TOUCH_END
,以便在用户 释放 按钮时发生,给他们机会通过将鼠标拖走来改变他们的想法。
你试过了吗:
indicator.connect("button-press-event", () => GLib.spawn_command_line_async("my_app"));
您正在寻找的信号应该是:按钮按下事件。
单击一次鼠标左键将触发 按钮按下事件 。
这个信号对我有用。我的 GNOME shell 版本是:3.36.9
show/hide 运行 应用程序的 window 是否有首选方法?
此 link 可能会对您有所帮助,或者至少希望能为您提供一些正确方向的指示:
https://github.com/amivaleo/Show-Desktop-Button/blob/master/extension.js
祝你好运!