2017-10-18 5 views
0

En essayant d'ouvrir un menu contextuel à partir d'un autre menu contextuel, j'ai rencontré un petit problème. Les deux menus se ferment lorsque j'ouvre le sous-menu. Une solution temporaire que j'utilise est de fermer le menu original sur le clic et le sous-menu reste ouvert alors. Je pense qu'ils essayent tous les deux d'attirer l'attention et de fermer à cause de cela. Est-ce que quelqu'un sait un moyen raisonnable de créer des popupmenus hiérarchiques dans les extensions shell gnome?Menu contextuel Gnome Shell Extension dans le menu contextuel

Répondre

0

Le système de menu dans la coque est un peu compliqué en ce qui concerne les signaux et l'ouverture et la fermeture. Vous devriez absolument jeter un coup d'oeil à popupMenu.js si vous ne l'avez pas déjà fait. Si je me souviens de mes propres aventures, il n'est pas possible d'avoir des sous-menus à cause de la propagation des signaux, mais vous pouvez sous-classer ces classes et modifier les signaux, ou vous pouvez fausser vos propres sous-menus en ajoutant la visibility propriété:

enter image description here

ont également un oeil à PopupMenuSection classe avec ses commentaires:

délibérément ignorer toute tentative d'ouverture() ou close(), mais j'émets le signal correspondant pour que les enfants puissent tout de même le saisir

+0

Ok, j'ai essayé de remplacer la fonction de fermeture dans ma sous-classe et cela maintient le menu ouvert maintenant. Cependant, j'ai toujours un problème avec le code. Comment accéder ou répliquer la fonction de fermeture d'origine? – varikas

+0

Vous devriez pouvoir appeler le "prototype" qui est en quelque sorte un "super" Javascript. Essayez 'PopupMenu.PopupSubMenu.prototype.close.call (this);' où PopupSubMenu est la classe que vous avez sous-classée. D'un autre côté, vous pourriez vouloir l'une de [ces fonctions] (https://github.com/GNOME/gnome-shell/blob/master/js/ui/popupMenu.js#L1134-L1167). J'ai fini par utiliser 'this._getTopMenu(). Close()' et en fermant le tout, parce que cela a fonctionné pour mon use-case. –