2011-02-20 35 views
5

Tôi đã tạo một cửa sổ bằng cách sử dụng - [NSWindow setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces]. Nó chỉ làm một nửa những gì tôi muốn, mặc dù: khi tôi chuyển đổi không gian, cửa sổ cũng chuyển không gian (như mong đợi), nhưng cửa sổ của tôi di chuyển về phía sau tất cả các cửa sổ khác trong không gian đó. Điều này đặc biệt xấu bởi vì ứng dụng của tôi đang hoạt động nhưng cửa sổ của nó nằm bên dưới tất cả các cửa sổ ứng dụng khác. Tôi đã thử thay đổi cấp độ thành NSFloatingWindowLevel, và điều đó giữ nó trên đầu trang, nhưng sau đó nó mất tình trạng chính (tập trung) khi chuyển đổi không gian.Giữ cửa sổ ở trên cùng khi chuyển đổi không gian

Tôi đã thử NSWindowCollectionBehaviorMoveToActiveSpace cho hành vi thu thập nhưng đó chắc chắn không phải là những gì tôi đang tìm kiếm.

Có hy vọng không? Tôi biết hầu như không có API nào khác có liên quan đến Spaces.

Trả lời

2

Spaces là một cơn đau. Giải pháp của tôi đã đăng ký cho một thông báo thay đổi như sau:

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

Sau đó, trong lớp WindowController tôi:

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

Đối với các cửa sổ không biên giới (tạo ra với NSBorderlessWindowMask), tôi đập đầu tôi cho đến khi tôi đã đưa ra sửa đổi sau đây thành Francis ':

- (void) activeSpaceDidChange:(NSNotification *)aNotification { 

    if ([NSApp isActive]) 
    { 
     NSRect windowRect = [[self window] frame]; 
     [[self window] setStyleMask:NSTitledWindowMask]; 
     [[self window] setStyleMask:NSBorderlessWindowMask]; 
     [[self window] setFrame:windowRect display:YES]; 
     [[NSApplication sharedApplication] activateIgnoringOtherApps : YES]; 
    } 
} 

Tôi thấy những người khác nói rằng cửa sổ không biên giới có vấn đề khiến tôi nghĩ đến việc lừa nó rily vào không nhìn thấy nó như là một cửa sổ không viền. Đầu tiên tôi đã thiết lập mặt nạ kiểu thành "Titled" theo sau là "activateIgnoringOtherApps" và sau đó thiết lập kiểu "không viền" trở lại, mà dường như là một giải pháp hợp lý hơn. Tuy nhiên, chỉ để xem giải pháp tối thiểu nào được yêu cầu để nó hoạt động, tôi đã nhìn thấy các tác phẩm trên. Hãy tuyệt vời nếu ai đó có thể điền vào những gì chính xác xảy ra cho phép điều này làm việc.

Các vấn đề liên quan