Question

Vous connaissez tous la barre de menus (ou mieux NSStatusBar) sous Mac OS X.
Il y a des objets que je peux déplacer et d'autres qui ne le sont pas.

J'aimerais pouvoir faire glisser le NSStatusItem de mon application.

Avez-vous une idée de la manière de le mettre en œuvre?

Était-ce utile?

La solution

Bien que NSStatusItems apparaissent à proximité des "extras de menus" internes d'Apple, ils sont distincts et se comportent différemment. Ce serait bien si Apple unifiait les éléments pouvant apparaître dans la zone de droite de la barre de menus, mais pour l'instant la section est divisée en "Apple interne" distinct. (à droite) et "fourni par l'application (NSStatusItem)" " à gauche.

Vous pouvez visualiser la distinction en mettant votre ordinateur en mode capture d'écran (cmd-shift-4), puis en appuyant sur la barre d'espace pour passer à "Capturer toute la fenêtre". Lorsque vous survolez les icônes de menu d’Apple, elles s’affichent toutes dans une seule fenêtre. Cela explique leur capacité à être facilement gérés et traînés. Le survol des autres éléments révèle que chaque NSStatusItem vit dans une fenêtre unique (qui appartient à l’application qui l’a installé).

Il est préférable de conserver NSStatusItem même si vous ne pouvez pas les faire glisser. C'est un inconvénient d'Apple que la plupart des utilisateurs comprendront, même si c'est gênant. Mettre l'accent sur les compromis positifs qu'offre une application plus stable sur le long terme adoucira généralement les opinions de vos clients (ou de vos gestionnaires?) Qui plaident pour la draggabilité.

Autres conseils

Vous devrez utiliser NSMenuExtra , et non < code> NSStatusItem et faites de l'élément de menu un ensemble s'exécutant dans le processus SystemUIServer , et non votre propre application. Vous aurez également besoin d’un code tel que celui fourni par MenuCracker pour que cela fonctionne.

NSMenuExtra n'est pas documenté et n'est pas pris en charge. Il est donc considéré comme un "hack".

Mon hypothèse est qu'il existe deux API en premier lieu: un plantage supplémentaire dans le menu (ou une fuite de mémoire) signifie que tout le processus SystemUIServer se bloque ou que la mémoire fuit & # 8212; y compris les modules tiers ainsi que ceux fournis par le système. Par contre, avec un élément d’état, un tel problème n’affecterait que votre propre code.

À partir de macOS Sierra 10.12 http://www.macworld.co.uk/how-to/mac-software/7-sierra-menu-bar-tips-how -utiliser-mac-menu-bar-in-macos-sierra-3649163 /

  

Les applications tierces s'installent parfois en tant que suppléments de menu, possèdent des commandes existantes dans la barre de menus ou peuvent être relancées en tant qu'applications sans visage bien qu'elles ne l'aient pas initialement été. À partir de macOS Sierra, ces options de menu peuvent être réorganisées exactement comme celles d'origine. (Ce n’était pas le cas jusqu’à OS X El Capitan.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top