Tengo algunos problemas con una aplicación en segundo plano que usa LSUIElement = 1 para ocultar su elemento de base, barra de menú y evitar que aparezca en el selector de aplicaciones Command-Tab.Snow Leopard & LSUIElement -> la aplicación no se activa correctamente, la ventana no está "activa" a pesar de ser "clave"
Parece ser solo un problema de Snow Leopard.
La aplicación coloca un NSStatusItem en la barra de menú y aparece un menú cuando se hace clic en él. Seleccionar "Preferencias ..." debería mostrar una ventana NSW con las preferencias.
Lo primero que no parece funcionar es que la Ventana no se ordena en el frente, sino que aparece detrás de todas las demás ventanas de la aplicación.
Me trataron de solucionar este problema llamando
[[NSApplication sharedApplication] activateIgnoringOtherApps: YES]
pero eso no funcionó.
Después de un tiempo me di cuenta de que el menú está bloqueando el mensaje al bucle de ejecución de ser enviado, por lo que escribió otro método en el MainController y envió el mensaje con un retraso:
[auto performSelector: @ selector (setFront :) withObject: [preferencesController window] afterDelay: 1.0];
-(void)setFront: (id) theWindow {
[[NSApplication sharedApplication]activateIgnoringOtherApps:YES];
[theWindow orderFrontRegardless];
[theWindow makeKeyWindow];
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
}
Nota del send-cada-posible-mensaje-a-hacer-que-hacer-lo-que-debe-ser-haciendo-enfoque.
Esto funciona, tipo de, la ventana se pone al frente sobre todas las demás ventanas de todas las aplicaciones, PERO la mayoría de las veces no está activa, lo que significa que su barra de título está atenuada. Al hacer clic en la barra de título, tampoco se activará la ventana. Al hacer clic dentro de la ventana, ¿se activará?
Todo esto no parecía ser un problema en Leopard; solo llamar a activateIgnoringOtherApps y hacer que la tecla de ventana pareciera funcionar bien.
En Snow Leopard no es una nueva API diseñado para sustituir LSUIElement que se supone para emular su comportamiento:
http://developer.apple.com/mac/library/releasenotes/cocoa/appkit.html
He jugado un poco con eso, pero es SL-solamente y refugio I' He podido configurar LSUIElement.
Lo que estás tratando de hacer se puede percibir como un robo del enfoque, que se hizo bastante difícil. Y es algo bueno ¿Qué hace tu menú? '[preferencesController showWindow:]'? – zneak
No se trata de robar el foco cuando el usuario selecciona "Preferencias ..." y ordena la ventana de preferencias al frente y la convierte en clave, pero sí, la buena gente de Apple podría intentar evitar que lo haga. –