2017-10-18 76 views
0

尝试从另一个popup菜单打开弹出菜单时,遇到了一个小问题。当我打开子菜单时,这两个菜单都关闭。我正在使用的临时解决方案是在点击时关闭原始菜单,然后子菜单保持打开状态。我认为他们都试图抓住焦点并因此而关闭。有谁知道在gnome shell扩展中创建分层popupmenus的合理方法吗?弹出菜单中的Gnome Shell Extension popupmenu

回答

0

shell中的菜单系统对信号和打开和关闭有点复杂。如果你还没有,你应该看看popupMenu.js

如果我回想起自己的冒险,由于信号传播的方式,子菜单中不可能有子菜单,但您可以继承这些类的任何一个并修改信号,也可以通过添加操作来伪造自己的子菜单在visibility属性:

enter image description here

PopupMenuSection类也可以看看它的评论:

故意忽略任何试图打开()或关闭()但发出相应的信号,让孩子们仍然可以拿起它

+0

好吧,我试图取代我的子类中的关闭功能,它保持菜单现在打开。不过,我仍然遇到代码问题。如何访问或复制原始关闭功能? – varikas

+0

你应该可以调用这种类似Javascript“超级”东西的“原型”。试试'PopupMenu.PopupSubMenu.prototype.close.call(this);'PopupSubMenu是你已经分类的任何类。另一方面,您可能需要[这些函数]之一(https://github.com/GNOME/gnome-shell/blob/master/js/ui/popupMenu.js#L1134-L1167)。我最终使用'this._getTopMenu()。close()'并关闭了整个事情,因为这对我的用例起作用。 –