2011-12-22 2 views
2

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

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

Любые мысли/предчувствия?

Update: После прочтения Документов я нашел это:

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

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

Спасибо!

+0

Btw, моя политика приложения NSApplicationActivationPolicyAccessory .. –

+0

Кроме того, preventWindowOrdering никогда не вызывается .. Еще рытья .. –

+0

«активизируется» поведение вашего приложения может быть перекрываться подклассе, может быть, вы пропустили вызов ' [супер-что-то], 'где-то? –

ответ

0

в 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 { 
    // 
} 
Смежные вопросы