2011-08-23 40 views
3

我正在編寫一個應用程序,它正在桌面圖標(Mac OSX 10.7 Lion)上繪製基本的NSWindow。NSWindow在桌面圖標上繪製

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

我發現了另一個問題。如果我激活了應用程序並保持在第一個空間上,並且在我的第一個屏幕截圖上看起來很好。如果我選擇桌面上的文件窗口也跳到後面: 對不起,不能老是發表諾特爾截圖

我希望我的問題是多一點理解。

我不知道如何解決這個問題。有人有個想法嗎? 謝謝!

回答

0

您可能需要爲空間更改通知註冊:

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

然後你可以迴應的通知和更新窗口:

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

我喜歡我的窗口永遠留在每一個空間。我認爲我的窗位有問題。爲了更好地理解,我在原始文章中添加了更多信息。 – floxxxy

+0

我已經更新了我的答案。 –

+0

謝謝,但現在有一個其他的風格錯誤。 我做了一個視頻,很難解釋:http://dl.dropbox.com/u/1503795/SpaceChange.mpg(7.4 MB) 第一次窗口在圖標後面,經過一點「搖動」窗口級別正確匹配。 – floxxxy