Show Window without activating (keep application below it active)
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.
_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:
-(BOOL)canBecomeKeyWindow {return NO;}
-(BOOL)canBecomeMainWindow {return NO;}
(I also tried canBecomeKeyWindow return YES and several other levels (for setLevel).
Any ideas?