2016-03-24 14 views
0

Ich versuche, ein kleines Fenster hinzuzufügen, das "Schnelleingabe" von jedem Ort im System zur Haupt-App bietet.Lassen Sie ein NSWindow (NSPanel) über Vollbild-Anwendungen schweben

Der Benutzer könnte einen Hotkey drücken, das Fenster erscheint und schwebt über allen anderen Fenstern.

In den meisten Fällen ist dies kein großes Problem. Ich kann ein NSWindow konfigurieren sein:

level = Int(CGWindowLevelKey.TornOffMenuWindowLevelKey.rawValue) 
collectionBehavior = .CanJoinAllSpaces 

ich es auch einen NSPanel mit NSNonactivatingPanelMask Option Set machen.

Das einzige Problem ist: Wie kann ich es so machen, dass das Fenster auf dem Bildschirm erscheinen kann, selbst wenn der Benutzer auf einem Platz ist, der eine Vollbild-App enthält?

Ich weiß, dass dies möglich ist, wenn die App LSUIElement=true (eine App ohne eine Position im Dock) ist, aber meine ist nicht.

Antwort

1

Okay, ich hatte die richtige Idee, der schwierige Teil ist, wie alle Optionen miteinander interagieren. Hier ist, was funktioniert:

  • NSPanel, nicht NSWindow
  • Stil Maske: NSBorderlessWindowMask | NSNonactivatingPanelMask

Und diese Eigenschaften:

level = Int(CGWindowLevelKey.MainMenuWindowLevelKey.rawValue) 
collectionBehavior = [.CanJoinAllSpaces, .FullScreenAuxiliary] 
0

Der Swift 3.0-Version von your self-answer ist

window.level = Int(CGWindowLevelForKey(.mainMenuWindow)) 
window.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary] 
+0

Es funktioniert jetzt nicht –

0

Und die Swift 4.0 Übersetzung ist dies .. Ich teste das noch, aber es scheint zu funktionieren.

self.view.window?.level = NSWindow.Level(rawValue: Int(CGWindowLevelForKey(.mainMenuWindow))) 
self.view.window?.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary] 
Verwandte Themen