Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

Начиная с MacOS Sierra 10.12 http://www.macworld.co.uk/how-to/mac-software/7-sierra-menu-bar-tips-how -use-макинтош-меню-бар-в-MacOS-сьерра-3649163 /

  

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top