Меню NSStatusItem не отображается в полноэкранном приложении Lion - PullRequest
1 голос
/ 23 августа 2011

У меня есть приложение переднего плана, которое показывает NSStatusItem вместе с меню (через NSStatusItem setMenu:(NSMenu *)menu). Однако это меню не отображается, когда я смотрю на другое приложение в полноэкранном режиме (например, Safari) в Lion.

Я знаю, что могу заставить его работать, установив для NSBGOnly значение true в файле Info.plist (или NSUIElement), но оба метода заставят значок моего приложения исчезнуть из переключателя задач, а также скрыть главный меню, когда мне удается сфокусировать свое приложение.

Наконец, я попытался установить для NSUIElement значение true и выполнить следующее в моем приложении при запуске (см. Также Как скрыть значок Dock ):

ProcessSerialNumber psn = { 0, kCurrentProcess };
TransformProcessType(&psn, kProcessTransformToForegroundApplication);

Это заставило снова появиться строку меню и значок док-станции, но исходная проблема (меню элемента состояния не отображается в другом полноэкранном приложении) снова видна. Что бы я ни пытался, я не могу победить.

Любые предложения будут высоко оценены!

1 Ответ

1 голос
/ 23 августа 2011

К сожалению, я думаю, что это ожидаемое поведение. Ваше приложение считается приложением переднего плана, поэтому весь его интерфейс отключен, пока другое приложение работает в полноэкранном режиме. Вам следует сообщить об ошибке, если вы считаете, что элементы состояния в приложениях переднего плана все еще должны быть доступны другим приложениям в полноэкранном режиме.

Вероятно, лучшим решением было бы разделить ваше приложение на две части: приложение-агент, для которого LSUIElement установлено значение true, которое создает элемент состояния и его меню и управляет им, и ваше основное приложение переднего плана, которое выполняет большую часть работать и который запускает и управляет приложением агента.

Существует множество способов взаимодействия между процессами, которые можно использовать для взаимодействия двух приложений, например Распределенные объекты или События Apple.

...