У меня возникла проблема с фоновым приложением, которое использует LSUIElement = 1, чтобы скрыть свой элемент док-станции, строку меню и предотвратить ее появление в переключателе приложений Command-Tab.
Кажется, проблема с Snow Leopard.
Приложение помещает NSStatusItem в строку меню и всплывает меню при нажатии. При выборе "Предпочтения..." следует указать NSWindow с предпочтениями.
Первое, что не работает, - это то, что окно не упорядочивается спереди, а появляется за всеми окнами других приложений.
Я попытался исправить это, вызвав
[[NSApplication sharedApplication] activateIgnoringOtherApps: YES]
но это не сработало.
Через некоторое время я понял, что меню блокирует сообщение в цикле запуска от отправки, поэтому я написал другой метод в MainController и отправил сообщение с задержкой:
[self performSelector: @selector (setFront:) withObject: [preferencesController window] afterDelay: 1.0];
-(void)setFront: (id) theWindow {
[[NSApplication sharedApplication]activateIgnoringOtherApps:YES];
[theWindow orderFrontRegardless];
[theWindow makeKeyWindow];
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
}
Обратите внимание на метод send-all-possible-message-to-make-it-do-what-it-should-be-doing-approach.
Это работает, вид, окно выводится на передний план поверх всех других окон из всех приложений, но большую часть времени он неактивен, что означает, что строка заголовка выделена серым цветом. Нажатие на строку заголовка также не сделает окно активным. Нажатие INSIDE окна сделает его активным!?
Все это, казалось, не было проблемой в Leopard; просто вызов activIgnoringOtherApps и создание оконного ключа, казалось, работали нормально.
В Snow Leopard появился новый API, предназначенный для замены LSUIElement, который должен эмулировать его поведение:
http://developer.apple.com/mac/library/releasenotes/cocoa/appkit.html
Я играл с этим, но это только SL, и я не смог установить LSUIElement.