Как перетащить NSStatusItems - PullRequest
       8

Как перетащить NSStatusItems

10 голосов
/ 08 марта 2009

Вы все знаете строку меню (или лучше сказать NSStatusBar) в Mac OS X.
Есть некоторые предметы, которые я могу перемещать, а другие нет.

Я бы хотел перетащить NSStatusItem моего приложения.

Есть идеи, как это реализовать?

Ответы [ 3 ]

19 голосов
/ 08 марта 2009

Несмотря на то, что NSStatusItems появляются рядом с внутренними «дополнениями» Apple, они различны и ведут себя по-разному. Было бы неплохо, если бы Apple объединила элементы, которые могут появиться в правой части строки меню, но пока раздел разделен на отдельные «внутренние яблоки» (справа) и «предоставленные приложением» (NSStatusItem) "слева.

Вы можете визуализировать различие, переведя компьютер в режим захвата экрана (cmd-shift-4) и нажав клавишу пробела, чтобы переключиться в режим «захватить все окно». При наведении курсора на значки меню Apple вы увидите, что все они живут в одном окне. Это объясняет их способность легко управляться и тащиться. Наведение указателя мыши на другие элементы показывает, что каждый NSStatusItem фактически живет в отдельном окне (которое принадлежит приложению, которое его установило).

Лучше придерживаться NSStatusItem, даже если вы не можете их перетащить. Это недостаток от Apple, который поймет большинство пользователей, даже если это раздражает. Подчеркивание положительных компромиссов, связанных с предложением более стабильного приложения на длительный срок, обычно смягчает мнение ваших клиентов (или менеджеров?), Которые стремятся к перетаскиваемости.

14 голосов
/ 08 марта 2009

Вам придется использовать NSMenuExtra, а не NSStatusItem, и сделать пункт меню пакетом, выполняющимся внутри процесса SystemUIServer, а не вашим собственным приложением. Вам также понадобится код, подобный тому, который предоставляется MenuCracker, чтобы заставить его работать.

NSMenuExtra не документирован и не поддерживается, и поэтому считается "взломом".

Я предполагаю, что, во-первых, существует два API: дополнительное аварийное завершение меню (или утечка памяти) означает сбой или утечку всего процесса SystemUIServer, включая другие сторонние модули, а также поставляемые системой. С другой стороны, для элемента статуса такая проблема может повлиять только на ваш собственный код.

0 голосов
/ 29 июня 2017

По состоянию на macOS Sierra 10.12 http://www.macworld.co.uk/how-to/mac-software/7-sierra-menu-bar-tips-how-use-mac-menu-bar-in-macos-sierra-3649163/

Сторонние приложения иногда устанавливаются как дополнительные функции меню, имеют элементы управления, которые существуют в строке меню, или могут быть перезапущены как безликие приложения, несмотря на то, что изначально это не так. Что касается macOS Sierra, эти дополнения меню могут быть переставлены так же, как и нативные. (Это не относится к OS X El Capitan.)

...