Неожиданное NSWindow становится ключевым окном

У меня есть основной NSWindow в моем приложении с кнопкой. Когда кнопка нажата, она делает что-то вроде следующего:

NSWindow *newWindow = [NSWindow initWithContentRect:[screen frame] styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
[newWindow makeKeyAndOrderFront:self];
[self.previousWindow orderOut:self];

В большинстве случаев это работает нормально, но если у меня открыто второе окно (называемое "другое") и на другом экране, прежде чем я нажимаю кнопку, происходит следующее:

  1. Мое новое окно создано, сделан ключ и заказан фасад.
  2. Предыдущее окно упорядочено.
  3. "Другое" окно сделано ключом.

Глядя на трассировку стека, я вижу, что "другое" окно становится ключом в результате отправки некоторого уведомления. Это не в моем приложении, поэтому должно быть, что-то какао. Учитывая, что я явно говорю, какое окно должно быть ключевым, почему Какао игнорирует это и изменяет его на что-то другое? Есть ли лучший способ сделать то, что я хочу?

Это не происходит, если все окна находятся на одном экране.

1 ответ

Решение

Как и ожидалось, это было исправлено путем замены порядка двух последних строк:

[self.previousWindow orderOut:self];
[newWindow makeKeyAndOrderFront:self];

У меня изначально были опасения, что делать вещи в таком порядке в приложении, где applicationShouldTerminateAfterLastWindowClosed возвращается YES может привести к преждевременному закрытию приложения, но это не так.

Другие вопросы по тегам