Отключить активацию приложения при нажатии на окно

В моем приложении Cocoa/Objective-C у меня есть служебная панель, плавающая «всегда сверху», чтобы быть доступной, даже когда мое приложение не активно. Я пытаюсь отключить "переключение на мое приложение, когда пользователь щелкает эту панель".

Поведение, которого я хотел бы добиться, похоже на средство просмотра клавиатуры OSX (которое также является панелью никогда не активируемой), чтобы какое-то другое приложение оставалось активным после нажатия на панель моего приложения. то есть Safari остается активным при вводе адреса с помощью средства просмотра клавиатуры. Эта функция есть даже у сторонних экранных клавиатур (например, от CORALLO Software), что означает, что такое поведение не зарезервировано только для системы.

Я возился с NSApplicationActivationPolicy, но безрезультатно. В каком направлении мне нужно идти?


person user1204187    schedule 11.02.2012    source источник


Ответы (1)


Вы должны взглянуть на методы canBecomeKeyWindow и canBecomeMainWindow на NSWindow. Похоже, вы хотите, чтобы ваше окно сохраняло статус key, но не могло быть главным окном. Вот несколько ресурсов, которые помогут вам:

person siannopollo    schedule 11.02.2012
comment
Я создал подкласс NSPanel с жестко заданными возвратами canBecomeKeyWindow и canBecomeMainWindow. Наилучшие результаты достигаются при возврате НЕТ — кнопки на панели можно нажимать, а окно никогда не активируется. Единственная проблема заключается в том, что приложение активируется (его название отображается в верхнем левом углу) при нажатии. После переопределения с помощью UIElement = YES в Info.plist само приложение не активируется, но окно, которое было активным до нажатия на панель, деактивируется. Есть ли способ избежать этого? - person user1204187; 12.02.2012
comment
Я уже переопределил скрытие панели с помощью [panel setFloatingPanel: YES];, поэтому панель всплывает над всеми приложениями, но даже после добавления (или замены setFloatingPanel на) setHidesOnDeactivate:NO проблема сохраняется: когда я нажимаю на свою панель, когда другое приложение активно , это приложение деактивируется, и мое приложение становится активным. Можно ли избежать деактивации другого приложения при нажатии на панель моего приложения? - person user1204187; 13.02.2012
comment
Кроме того, setRefusesFirstResponder NSControl может влиять на перемещение элементов управления вперед при нажатии. - person Jeff; 24.09.2014