【发布时间】:2017-10-19 08:52:34
【问题描述】:
在尝试从另一个弹出菜单打开一个弹出菜单时,我遇到了一个小问题。当我打开子菜单时,两个菜单都会关闭。我正在使用的一个临时解决方案是在单击时关闭原始菜单,然后子菜单保持打开状态。我认为他们都试图抓住焦点并因此而关闭。有谁知道在 gnome shell 扩展中创建分层弹出菜单的合理方法?
【问题讨论】:
在尝试从另一个弹出菜单打开一个弹出菜单时,我遇到了一个小问题。当我打开子菜单时,两个菜单都会关闭。我正在使用的一个临时解决方案是在单击时关闭原始菜单,然后子菜单保持打开状态。我认为他们都试图抓住焦点并因此而关闭。有谁知道在 gnome shell 扩展中创建分层弹出菜单的合理方法?
【问题讨论】:
shell 中的菜单系统在信号和打开和关闭方面有点复杂。如果您还没有,您绝对应该看看popupMenu.js。
如果我回忆起自己的冒险经历,由于信号传播的方式,子菜单中不可能有子菜单,但您可以将这些类中的任何一个子类化并修改信号,或者您可以通过添加操作来伪造自己的子菜单visibility属性:
还可以查看 PopupMenuSection 类及其评论:
故意忽略任何打开()或关闭()的尝试,但发出相应的信号,以便孩子们仍然可以捡起它
【讨论】:
PopupMenu.PopupSubMenu.prototype.close.call(this); 其中 PopupSubMenu 是您子类化的任何类。另一方面,您可能需要these functions 之一。我最终使用了this._getTopMenu().close() 并关闭了整个过程,因为这适用于我的用例。