Show Window without activating (keep application below it active)

Discussion in 'Mac Programming' started by wesleyh, Feb 26, 2013.

  1. macrumors 6502

    Joined:
    Mar 23, 2007
    #1
    I need to show a window (without title bar) above third party applications without my window taking focus.

    I have tried using an NSPanel and setting enabling non-activating, but that didn't help.

    I tried orderFront:self, but that didn't help either.

    I always needed to add [NSApp activateIgnoringOtherApps:YES]; because the window wouldn't show otherwise.

    I have here a sample project for just this functionality:
    http://users.telenet.be/prullen/TopW2.zip

    UIElement is set to true in the application's plist file, so there is no dock. You can activate the window by pressing ALT + SPACE at the same time. You will see that the app below it looses focus. Any thoughts on how to fix this? I've seen other apps do it so I know it's possible.

    Edit: here's the code so far. Remember the window is a non-activating NSPanel. I still need that last NSApp activateIgnoringOtherApps line or otherwise it doesn't display. But of course that makes the window the active one.

    Code:
     _windowController = [[MyWindowController alloc] initWithWindowNibName:@"MyWindowController"];
    
        [[_windowController window] setLevel:NSNormalWindowLevel+1];
        [[_windowController window] orderFrontRegardless];
    
        [_windowController showWindow:self];
    
       [NSApp activateIgnoringOtherApps:YES];
    
    I've also subclassed NSPanel and added two methods:

    Code:
    - (BOOL)canBecomeKeyWindow
    {
        return NO;
    }
    
    - (BOOL)canBecomeMainWindow
    {
        return NO;
    }
    
    (I also tried canBecomeKeyWindow return YES and several other levels (for setLevel).

    Any ideas?
     

Share This Page