У меня есть приложение LSUIElement
, которому необходимо сохранить его статус LSUIElement
(у него не может быть значок док-станции) это приложение запускается и обрабатывается плагином.Принудительное приложение LSUIElement «Аксессуар» на передней панели
Когда я меняю приложение так, что это «обычное» приложение (без LSUIElement
), [NSApp activateIgnoringOtherApps:YES]
работает отлично. Однако, когда я делаю это LSUIElement
, он показывает окно, но окно застряло за сафари (где работает плагин), но поверх всего остального. Я звоню -[NSWindow makeKeyAndOrderFront:self];
, но это не имеет никакого значения.
Чтобы быть понятным, сторона «плагин» не имеет значения, поскольку плагин и приложение являются двумя отдельными процессами. Плагин отправляет событие (через машинный порт) в приложение, которое вызывает некоторый код, чтобы открыть окно и привлечь его к фокусу. Проблема заключается в том, что код для его фокусировки работает только тогда, когда это не приложение LSUIElement
.
Я исчерпывающе искал существующий звонок, чтобы сделать эту работу, я открыт для предложений о том, как подделать щелчок мышью или даже запустить некоторый applescript, чтобы сделать эту работу, возможно, есть недокументированный метод выполнения этого ,
Документы Apple для LSUIElement
Состояние «Приложение не отображается в Доке и не имеет панели меню, но может быть активировано программно», но я не могу найти магию, которая позволяет это.
pzich in freenode #macdev предлагается [NSWindow setLevel:]; установив, что NSMainMenuWindowLevel выводит его перед сафари, однако окно все еще не является ключевым. –
Я не понимаю этот вопрос. '[NSApp activateIgnoringOtherApps: YES]' - как вы должны перенести свое приложение вперед. Это не должно заставлять ваше приложение «удалять LSUIElement» и показывать значок док-станции. Вы действительно видите значок док-станции? –
Курт, просто сформулированный плохо. Теперь он отредактирован для ясности. –