Как заставить приложение оставаться на вершине полноэкранных приложений

У меня есть приложение, которое должно всегда оставаться поверх других приложений. В настоящее время я использую свойство setLevel для главного окна, чтобы сохранить его поверх других настольных приложений.

Я пытаюсь исправить свое приложение, чтобы оно также оставалось поверх полноэкранных приложений в Lion. Любые идеи о том, как это можно сделать?

Делегат приложения выглядит так:

#import "alwaysOnTopAppDelegate.h"

@implementation alwaysOnTopAppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [window setLevel:NSFloatingWindowLevel];
}

@end

Ответ 1

Найден ответ: делегат приложения должен выглядеть так:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [window setLevel:kCGMainMenuWindowLevel-1];
    [window setCollectionBehavior:NSWindowCollectionBehaviorStationary|NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary];
}

Ответ 2

То, как работает Yoink, прост: Просто установите "Application is Agent (UIElement)" в YES в Info.plist для вашего приложения. Это будет означать, что он не отображается на доке и т.д., Но это, вероятно, прекрасно для вспомогательного окна (ну, это было для меня!). Вероятно, имеет смысл представить элемент меню в этом случае, чтобы пользователь мог легко остановить приложение.

Ответ 3

follow - мой тестовый код, он работает нормально, надеюсь, может помочь.

NSPanel *test_panel = [[NSPanel alloc] initWithContentRect:NSMakeRect(300, 300, 500, 500) styleMask:NSTitledWindowMask|NSClosableWindowMask backing:NSBackingStoreBuffered defer:YES];
[test_panel setReleasedWhenClosed:YES];
[test_panel setHidesOnDeactivate:NO];
[test_panel setFloatingPanel:YES];
[test_panel setStyleMask:NSBorderlessWindowMask | NSNonactivatingPanelMask];
[test_panel setLevel:kCGMainMenuWindowLevel-1];
[test_panel  setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary];
[test_panel setCanBeVisibleOnAllSpaces:YES];
[test_panel center];
[test_panel orderFront:nil];