Какао положить окно на переднем плане - PullRequest
0 голосов
/ 12 декабря 2011

Я создаю приложение Cocoa Mac, которое работает в фоновом режиме, но имеет главное окно.

Чтобы оно работало в фоновом режиме, я установил для «Приложение только фон» значение «ДА».

Я создал системный трей:

system tray

Если вы закроете главное окно, вы можете снова открыть его, нажав «открыть».

У меня, однако, есть некоторые проблемы с наслоением окон:

  • Когда я запускаю приложение, открывается главное окно, однако оно появляется на заднем плане, позади любых других окон или приложений, которые я открывал в то время.
  • Нажатие на «open» не выводит окно на передний план.Он открывается правильно, если он был закрыт, однако он остается за любыми окнами.
  • При нажатии на настройки или около возникает та же проблема.Это открывает правильное окно, но оно появляется позади любых других окон.
  • В моем главном окне есть текстовое поле.Я могу нажать на нее, курсор мигает, как будто я готов набрать.Но когда я набираю текст, он печатает в каком-то другом фоновом окне!Например, если у меня TextWrangler открыт в фоновом режиме, он будет печатать там вместо текстового поля ...

Вот мой код для обработки "open":

- (IBAction)show:(id)sender {
    [NSApp activateIgnoringOtherApps:YES];
    [window makeKeyAndOrderFront:sender];   
}

Обратите внимание, что, если я установлю «Приложение только фон» на «НЕТ» (что означает, что у меня появляется значок дока), то нажатие на «Открыть» выведет окно на передний план, как и ожидалось.И ввод в текстовое поле работает как ожидалось.

Ответы [ 2 ]

4 голосов
/ 12 декабря 2011

Вместо только фона, я думаю, вы хотите Application is agent (UIElement) установить на YES. Фон только для приложения, не предназначенного для отображения пользователям.

1 голос
/ 13 декабря 2011

Только фон (LSBackgroundOnly YES) предназначен для безликих фоновых приложений, Аксессуар (LSUIElement YES) предназначен для фоновых приложений с пользовательским интерфейсом и меню состояния (дополнительное меню / дополнительное меню / и т. Д. - имя меняется ...).

Аксессуар не будет отображаться в док-станции, иметь стандартную строку меню или появляться в диалоговом окне принудительного выхода из Finder. Может быть «активным» и может иметь окно ключа.

Хотя у него нет странной строки меню (возможно, ошибка), если MainMenu объявлен в XIB, он будет реагировать на сочетания клавиш, когда он активен. Чтобы избежать этого, убедитесь, что у вас нет MainMenu или используйте [NSApp setMainMenu:nil], если вы хотите отключить ярлыки.

Весь фон / аксессуар / приложение / активный / и т. Д. территория не совсем четко определена, будьте готовы к «веселью» ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...