Обычные приложения OSX используют первый щелчок мыши, когда не сфокусированы, чтобы сначала сфокусировать приложение. Затем будущие клики обрабатываются приложением. Кнопка iTunes play/pause и Finder ведут себя по-другому, первый щелчок действует даже тогда, когда он не сфокусирован. Я ищу способ заставить существующее приложение (Remote Desktop Connection.app) действовать при первом щелчке, а не просто фокусироваться.
Сделать приложение OSX первым кликом мыши, если он не сфокусирован
Ответ 1
Проверьте, что NSView принимает FirstMouse, возможно, это то, что вы ищете.
acceptsFirstMouse: Переопределяется подклассами, чтобы вернуть YES, если получателю необходимо отправить сообщение mouseDown: для начального события mouse-down, NO, если нет.
- (BOOL) принимает FirstMouse: (NSEvent *) theEvent
Параметры событие Начальное событие мыши, которое должно быть над получателем в его окне.
Обсуждение Приемник может либо безоговорочно вернуть значение, либо использовать местоположение объекта, чтобы определить, хочет ли он событие. По умолчанию реализация игнорирует объект и возвращает NO.
Переопределите этот метод в подклассе, чтобы позволить экземплярам отвечать на клики. Это позволяет пользователю нажимать на представление в неактивном окне, активируя представление одним щелчком мыши, вместо того, чтобы щелкнуть сначала, чтобы сделать окно активным, а затем щелкнуть по представлению. Большинство объектов просмотра отказываются от попытки перехода по клику, поэтому событие просто активирует окно. Однако многие объекты управления, такие как экземпляры NSButton и NSSlider, принимают их, поэтому пользователь может сразу же манипулировать элементом управления без необходимости отпускать кнопку мыши.
Ответ 2
Ответ на первый щелчок мыши, когда он не сфокусирован, называется "щелчком". И его ценность обсуждается горячо, например здесь и здесь.
Ответ 3
//Предполагая, что у вас есть 1 контроллер просмотра, который всегда висит вокруг. Перед поездкой на погрузку. Нотабене это не будет работать до-йосемити.
- (void)loadView {
NSLog(@"loadView");
self.view = [[NSView alloc] initWithFrame:
[[app.window contentView] frame]];
[self.view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
int opts = (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways);
trackingArea0 = [[NSTrackingArea alloc] initWithRect:self.view.bounds
options:opts
owner:self
userInfo:nil];
[self.view addTrackingArea:trackingArea0];
}
- (void)mouseEntered:(NSEvent *)theEvent {
NSLog(@"entered");
if ([[NSApplication sharedApplication] respondsToSelector:@selector(activateIgnoringOtherApps:)]) {
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
}
}