Ich habe ein paar Probleme mit einer Hintergrundanwendung, die LSUIElement = 1 verwendet, um seine Dock-Element, Menüleiste und verhindern Sie, dass es in der Befehls-Tab-Anwendung erscheint.Snow Leopard & LSUIElement -> Anwendung nicht richtig aktiviert, Fenster nicht "aktiv" trotz "Schlüssel"
Es scheint ein Snow Leopard nur Problem zu sein.
Die Anwendung platziert ein NSStatusItem in der Menüleiste und öffnet ein Menü, wenn darauf geklickt wird. Wenn Sie "Einstellungen ..." auswählen, sollte ein NSWindow mit den Einstellungen geöffnet werden.
Die erste Sache, die nicht zu funktionieren scheint, ist, dass das Fenster nicht an der Vorderseite geordnet wird, sondern hinter allen anderen Anwendungsfenstern erscheint.
Ich habe versucht, dieses Problem zu beheben, indem
[[NSApplication sharedApplication] activateIgnoringOtherApps: YES]
nennen, aber das hat nicht funktioniert.
Nach einer Weile mir herausgefunden, dass das Menü aus der Nachricht an die Laufschleife blockiert gesendet werden, so habe ich ein weiteres Verfahren auf den MainController und gesendet, um die Nachricht mit einer Verzögerung:
[self perform: @ selector (setFront :) withObject: [preferencesController window] afterDelay: 1.0];
-(void)setFront: (id) theWindow {
[[NSApplication sharedApplication]activateIgnoringOtherApps:YES];
[theWindow orderFrontRegardless];
[theWindow makeKeyWindow];
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
}
Beachten Sie die send-every-möglich-message-to-make-it-do-was-it-sollte-sein-doing-Ansatz.
Das funktioniert, irgendwie wird das Fenster über alle anderen Fenster von allen Apps nach vorne gebracht, ABER die meiste Zeit ist es nicht aktiv, was bedeutet, dass die Titelleiste ausgegraut ist. Ein Klick auf die Titelleiste macht das Fenster auch nicht aktiv. Durch Klicken auf INSIDE wird das Fenster aktiviert !?
Dies alles schien kein Problem in Leopard zu sein; nur aufrufen activateIgnoringOtherApps und die Fenster-Taste schien gut zu funktionieren.
In Snow Leopard gibt es eine neue API LSUIElement zu ersetzen entworfen, die sein Verhalten soll emulieren:
http://developer.apple.com/mac/library/releasenotes/cocoa/appkit.html
ich gespielt habe damit um, aber es ist SL-only und ich haven‘ Es ist mir gelungen, LSUIElement zu setzen.
Was Sie versuchen zu tun, kann als Stehlen des Fokus wahrgenommen werden, der ziemlich hart gemacht wurde. Und es ist eine gute Sache. Was macht deine Speisekarte? '[preferencesController showWindow:]'? – zneak
Es ist kaum schwer, den Fokus zu stehlen, wenn der Benutzer "Einstellungen ..." auswählt und das Voreinstellungsfenster nach vorne sortiert und es zu einem Schlüssel macht, aber ja, die netten Leute bei Apple könnten versuchen, das zu verhindern. –