Какао NSApplication не активен, но получает события мыши - PullRequest
2 голосов
/ 22 декабря 2011

У меня странная проблема, когда я щелкаю в своем окне.Уходит в отставку главный и ключевой.Затем я возвращаюсь к нему, и представление, на которое щелкнули, не реагирует на щелчок мышью.Но второй щелчок заставляет представление реагировать.Как будто во время первого щелчка окно не было ключевым, и щелчок заставил его стать ключевым и смог обработать второй щелчок.

Я подклассифицировал NSApplication и перехватил sendEvent:, чтобы увидеть, если мойприложение получало события во время первого клика, и это действительно так.Кроме того, я сбросил цепочку респондента и увидел, что мой взгляд действительно был в цепочке, но окно не было ключевым до второго щелчка.Я также заметил, что когда я получаю событие первого нажатия, приложение даже не активируется.Как это возможно?Разве приложение не должно стать активным, когда оно получает событие мыши?Цыпленок / яйцо ...

Есть мысли / предложения?

Обновление: Прочитав документы, я нашел это:

Мышьсобытия down-down отправляются, когда пользователь нажимает кнопку мыши, когда курсор находится над объектом просмотра.Если окно, содержащее вид, не является ключевым, оно становится ключевым и отбрасывает событие нажатия мыши.Тем не менее, представление может обойти это поведение по умолчанию, переопределив метод acceptViewFirstMouse: NSView для возврата YES.

Таким образом, похоже, что это происходит.Однако я попытался переопределить acceptsFirstMouse: и acceptsFirstResponder, но безрезультатно.Мои взгляды до сих пор не «принимают первую мышь».

Спасибо!

1 Ответ

0 голосов
/ 02 февраля 2015

в 10.10> в вашем приложении-делегате - вы можете подключиться к событиям мыши и заставить окно стать активным.

- (void)applicationDidUpdate:(NSNotification *)notification {
     NSLog(@"did update");
    // [[NSApp mainWindow] makeKeyWindow];doesn't work. not sure why. 
    [[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
}

- (void)applicationDidResignActive:(NSNotification *)notification {
   // your window lost focus here
}

- (void)applicationDidBecomeActive:(NSNotification *)notification {
   // 
}
...