NSWindow рисовать поверх значков рабочего стола - PullRequest
3 голосов
/ 23 августа 2011

Я пишу приложение, которое пытается нарисовать простое NSWindow поверх значков рабочего стола (Mac OSX 10.7 Lion).

NSWindow *systemInfoWindow  = [[NSWindow alloc] initWithContentRect:frame
                                                 styleMask:NSBorderlessWindowMask
                                                   backing:NSBackingStoreBuffered
                                                     defer:NO];
systemInfoWindow.delegate = self;
[systemInfoWindow setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces];

[systemInfoWindow setBackgroundColor:backgroundColorSpace];
[systemInfoWindow makeKeyAndOrderFront:NSApp];
[systemInfoWindow setLevel:kCGDesktopIconWindowLevel];

Эта часть кода работает довольно хорошо, и NSWindow рисует поверх иконок. Но если я переключаюсь между двумя пробелами, мое NSWindow остается за иконками.

/ * === Обновление === * / Я думаю, что у меня есть проблемы с моим уровнем окна. Для лучшего понимания я загрузил два скриншота. Пробел 1 - окно остается на значке, как я хочу http://dl.dropbox.com/u/1503795/Space1.png

Пробел 2 - окно находится за значками рабочего стола. Они также должны оставаться на вершине http://dl.dropbox.com/u/1503795/Space2.png

Еще одна проблема, которую я обнаружил. Если я активировал приложение и остаюсь на первом Space, и все выглядит хорошо, как на моем первом снимке экрана. Если я выберу «Файлы» на рабочем столе, окно также перейдет на задний план: Извините, не могу выложить еще один скриншот

Надеюсь, моя проблема немного понятнее.

Я не знаю, как это исправить. У кого-нибудь есть идея? Спасибо!

1 Ответ

0 голосов
/ 24 августа 2011

Возможно, вам необходимо зарегистрироваться для уведомления об изменении пространства:

NSNotificationCenter* nc = [[NSWorkspace sharedWorkspace] notificationCenter];
[nc addObserver:self 
    selector:@selector(activeSpaceDidChange:) 
    name:NSWorkspaceActiveSpaceDidChangeNotification 
    object:nil];

Затем вы можете ответить на уведомление и обновить свое окно:

- (void) activeSpaceDidChange:(NSNotification*)aNotification 
{
    [[self window] orderFront:self];
}
...