Сделать приложение OSX первым кликом мыши, если он не сфокусирован

Обычные приложения OSX используют первый щелчок мыши, когда не сфокусированы, чтобы сначала сфокусировать приложение. Затем будущие клики обрабатываются приложением. Кнопка iTunes play/pause и Finder ведут себя по-другому, первый щелчок действует даже тогда, когда он не сфокусирован. Я ищу способ заставить существующее приложение (Remote Desktop Connection.app) действовать при первом щелчке, а не просто фокусироваться.

Ответ 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];
        }

}