在OSX 10.6.8上将窗口设置为假全屏后,无法成为关键窗口

时间:2013-05-06 10:34:48

标签: osx-snow-leopard fullscreen keywindow

我的应用程序最初有一个窗口(Def)。然后它产生了一个新窗口(新)。所有这两个窗口都可以从Window子菜单项或空间控件切换。

但是如果我试图在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”。我总是可以在Window子菜单中看到“Def”。

有人遇到过这个问题吗?

1 个答案:

答案 0 :(得分:0)

最后经过2天的调查,答案可以追溯到NSWindow的文件。

有两种相关的方法。

  
      
  • (BOOL)canBecomeKeyWindow   回报价值   如果窗口可以成为关键窗口,则为YES,否则为NO。
  •   
     

讨论   如果此方法返回NO,则尝试使窗口成为关键窗口。如果窗口有标题栏或调整大小条,则NSWindow实现返回YES,否则返回NO。

  

canBecomeMainWindow   指示窗口是否可以成为应用程序的主窗口。

     
      
  • (BOOL)canBecomeMainWindow   回报价值   窗口可以成为主窗口时是;否则,NO。
  •   
     

讨论   如果此方法返回NO,则尝试使窗口成为主窗口。如果窗口可见,不是NSPanel对象,并且具有标题栏或调整大小机制,则NSWindow实现返回YES。否则返回NO。

所以结论是,如果窗口没有标题栏或调整大小栏,默认情况下它不能成为主窗口和关键窗口。当[NSWindow setStyleMask:NSBorderlessWindowMask]将窗口设置为10.6.8的假全屏时,标题栏为锣。

要解决此问题,需要在返回YES时覆盖上述2个方法。