2009-12-25 3 views
7

Angenommen, der Nutzer befindet sich derzeit in Chrome. Also habe ich eine HUD, die von einem globalen Hotkey aufgerufen wird, der Benutzer tippt etwas hinein und wenn man auf Close oder OK klickt, verschwindet die HUD (nur mit [NSPanel orderOut:]), aber meine Anwendung ist immer noch fokussiert (dh das Menü Balken meiner Anwendung ist noch sichtbar). Aber ich möchte, dass der Fokus auf der ursprünglichen Anwendung Chrome liegt. Wie erreiche ich so etwas? Im Idealfall wäre ich auch nicht in der Lage, mich auf meine Anwendung zu konzentrieren. Daher würde die HUD-Eingabe immer stattfinden, während Chrome immer noch die fokussierte Anwendung war. Things.app schafft es, so etwas zu erreichen. Quicksilver macht das auch.Wie kann ich den Fokus auf die vorherige Anwendung in Cocoa übertragen?

Antwort

0

Wenn dies die einzige Benutzeroberfläche ist, die Ihre Anwendung zu bieten hat, können Sie ihr einen LSUIElement Info.plist-Schlüssel geben, der verhindert, dass sie sich im Dock befindet oder die aktive Anwendung ist.

+0

Nein, ich habe ein anderes Fenster, das angezeigt wird, wenn Sie die Anwendung verwenden. Und dieses Fenster verhält sich wie jedes normale Anwendungsfenster, so dass ich LSUIElement nicht verwenden kann. – user220582

+0

Warum nicht? Es scheint, als ob Sie wollen. –

+0

Nein, ich möchte ein Dock-Symbol für meine Anwendung. – user220582

1

Sie können entweder eine gesichtslose Helfer-App haben, die dies für Sie erledigt, oder Sie erhalten die PSN des vordersten Prozesses, bevor Sie weitergeleitet werden, und wechseln zurück, wenn Sie weggehen möchten.

+0

gehen Sie mit dem ersten, wenn möglich, weniger anfällig für Fehler – cobbal

7

Anruf [NSApp hide:]

, die Ihre Anwendung verstecken und aktivieren Sie die zuvor aktive Anwendung.

+0

Dies ist nicht wahr, wenn Ihre App ein Vollbild-Fenster hat. – George

2

Um nie den Fokus auf Ihre Anwendung zu erhalten, rufen Sie [panel setStyleMask:[panel styleMask] | NSNonactivatingPanelMask]; auf Ihrem NSPanel oder das Kontrollkästchen nicht aktivierenden Kontrollkästchen auf Ihrem NSPanel in Interface Builder.

Verwandte Themen