NSApplication делает окно фронтальным при переключении приложений

При запуске моего приложения (OSX, macOS SDK 10.15) оно показывает главное окно, как и ожидалось. Затем я перехожу к другому приложению с помощью CMD-Tab, но когда я возвращаюсь к своему приложению с помощью CMD-Tab, окно не отображается. То же самое происходит, если я нажму на него в доке. Я пробовал различные предложения, такие как:

[NSApp activateIgnoringOtherApps:YES];
[window makeKeyAndOrderFront:nil];
[window orderFrontRegardless];

и

[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(applicationSwitchedTo) name:NSWorkspaceDidActivateApplicationNotification object:nil];

-(void)applicationSwitchedTo
{
    [window makeKeyAndOrderFront:nil];
}

Я настроил все методы обратного вызова как в делегатах окна, так и в приложении, но я ничего не получаю, кроме указанного выше обратного вызова, когда переключаюсь в приложение или из него. Я бы подумал, что по умолчанию будет отображаться главное окно приложения при переключении на него из другого приложения. Любая помощь приветствуется!


person Jex_and_Izzy    schedule 13.11.2020    source источник
comment
Как создается окно? Когда исчезает окно? Опубликуйте минимально воспроизводимый пример, пожалуйста.   -  person Willeke    schedule 13.11.2020
comment
Спасибо за ответ. Вы правы, я сделаю это в следующий раз!   -  person Jex_and_Izzy    schedule 17.11.2020


Ответы (1)


Я нашел исправление, но я не уверен, что это правильно. Я заметил, что если я позвоню

[NSApp finishLaunching]

то функции упорядочения окон не работают. Мне не нужен этот функционал, поэтому я его удалил. Кроме того, теперь я обрабатываю тип события NSEventTypeAppKitDefined, который вызывается при включении и выключении приложения. Затем я проверяю подтип и вызываю функцию упорядочения окон:

case NSEventTypeAppKitDefined:
{
     if([theEvent subtype] == NSEventSubtypeApplicationActivated) {
          [window makeKeyAndOrderFront:nil];
     }
}

Надеюсь, это поможет кому-то в будущем!

person Jex_and_Izzy    schedule 13.11.2020