Неожиданное NSWindow становится ключевым окном
У меня есть основной NSWindow
в моем приложении с кнопкой. Когда кнопка нажата, она делает что-то вроде следующего:
NSWindow *newWindow = [NSWindow initWithContentRect:[screen frame] styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
[newWindow makeKeyAndOrderFront:self];
[self.previousWindow orderOut:self];
В большинстве случаев это работает нормально, но если у меня открыто второе окно (называемое "другое") и на другом экране, прежде чем я нажимаю кнопку, происходит следующее:
- Мое новое окно создано, сделан ключ и заказан фасад.
- Предыдущее окно упорядочено.
- "Другое" окно сделано ключом.
Глядя на трассировку стека, я вижу, что "другое" окно становится ключом в результате отправки некоторого уведомления. Это не в моем приложении, поэтому должно быть, что-то какао. Учитывая, что я явно говорю, какое окно должно быть ключевым, почему Какао игнорирует это и изменяет его на что-то другое? Есть ли лучший способ сделать то, что я хочу?
Это не происходит, если все окна находятся на одном экране.
1 ответ
Как и ожидалось, это было исправлено путем замены порядка двух последних строк:
[self.previousWindow orderOut:self];
[newWindow makeKeyAndOrderFront:self];
У меня изначально были опасения, что делать вещи в таком порядке в приложении, где applicationShouldTerminateAfterLastWindowClosed
возвращается YES
может привести к преждевременному закрытию приложения, но это не так.