Сделать NSWindow перед, но не в фокусе - PullRequest
15 голосов
/ 01 февраля 2011

Я хочу поставить новое NSWindow перед всеми остальными окнами, но не заставлять его фокусироваться.

Я могу сделать так, чтобы он отображался спереди с фокусировкой:

NSApplication *thisApp = [NSApplication sharedApplication];
[thisApp activateIgnoringOtherApps:YES];

[self makeKeyAndOrderFront:self];

Какие-нибудь подсказки о том, как сделать так, чтобы он появлялся сверху, но не отвлекал внимание от другого приложения?

Ответы [ 3 ]

15 голосов
/ 01 февраля 2011

Вместо makeKeyAndOrderFront:, попробуйте просто orderFront: ( документы )

6 голосов
/ 01 февраля 2011

Попробуйте что-то вроде этого:

[window setLevel:NSScreenSaverWindowLevel + 1];
[window orderFront:nil];

Это покажет окно над окнами других приложений, но без активации.Окно с нормальным уровнем окна в приложении A не может быть отображено перед окном приложения B, если приложение B является активным приложением.(Есть веская причина для этого, кстати).

Пожалуйста, используйте этот метод по своему усмотрению.Во многих случаях это может привести к нарушению правил взаимодействия с человеком.При неправильном использовании он может иметь тенденцию раздражать пользователя.(Например, в моем тестировании только сейчас, появилось окно, расположенное прямо над тем местом, на которое я случайно смотрел в Safari. Тот факт, что это мешало тому, что я делал, все же имел смелость, чтобы стало ключевым, сделало это еще более раздражающим. Если бы это было в стороне от моего экрана, это могла бы быть другая история).

4 голосов
/ 22 ноября 2011

Методы фронта ордера и уровень до заставки +1 у меня не сработали. Этот ответ от The-Kenny сделал, хотя:

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