Не может стать ключевым окном после установки окна в полноэкранный режим на OSX 10.6.8
У моего приложения изначально было окно (Def). Затем появилось новое окно (Новое). Все два окна можно переключить из пункта подменю "Окно" или с помощью клавиши "Space".
Но если бы я попытался установить "Новое" окно в поддельный полноэкранный режим на OSX 10.6.8, возникла бы проблема, если бы я переключился в "Def" окно либо с помощью меню, либо с помощью управления пространством. Я не могу "полностью" переключиться обратно в "Новое" окно.
// setting a fake full screen window on 10.6.8
NSApplicationPresentationOptions prereqOptions =
NSApplicationPresentationAutoHideDock |
NSApplicationPresentationAutoHideMenuBar;
[[NSApplication sharedApplication]
setPresentationOptions:prereqOptions];
[[self window] setToolbar:nil];
[[self window] setStyleMask:NSBorderlessWindowMask];
[[self window] setFrame:[[NSScreen mainScreen] frame]
display:YES];
"Полностью" означает, что я вижу, что "Новое" отображается в верхней части экрана, но контроллер окна не может получить уведомление "NSWindowDidBecomeKeyNotification". Кроме того, с помощью [NSApp keyWindow] я вижу, что окно ключа всегда имеет значение "Def". И я всегда вижу, что "Def" проверено в подменю Window.
Кто-нибудь когда-либо сталкивался с этой проблемой?
1 ответ
Наконец, после 2 дней расследования ответ возвращается к документации NSWindow.
Есть два связанных метода.
- (BOOL) canBecomeKeyWindow Возвращаемое значение YES, если окно может стать ключевым, иначе NO.
Обсуждение Попытки сделать окно ключевым окном прекращаются, если этот метод возвращает NO. Реализация NSWindow возвращает YES, если у окна есть строка заголовка или строка изменения размера, или NO в противном случае.
А также
canBecomeMainWindow Указывает, может ли окно стать главным окном приложения.
- (BOOL) canBecomeMainWindow Возвращаемое значение YES, когда окно может стать главным окном; в противном случае НЕТ.
Обсуждение Попытки сделать окно главным окном прекращаются, если этот метод возвращает NO. Реализация NSWindow возвращает YES, если окно является видимым, не является объектом NSPanel и имеет строку заголовка или механизм изменения размера. В противном случае возвращается НЕТ.
Таким образом, вывод заключается в том, что если окно не имеет строки заголовка или панели изменения размера, оно по умолчанию не может стать главным и ключевым окном. При установке окна на поддельный полноэкранный режим на 10.6.8 с помощью [NSWindow setStyleMask:NSBorderlessWindowMask] строка заголовка будет gong.
Чтобы решить эту проблему, необходимо переопределить 2 вышеупомянутых метода с возвращением YES.