Sto riscontrando qualche problema con un'applicazione di sfondo che utilizza LSUIElement = 1 per nascondere la sua voce di dock, la barra dei menu e impedirgli di apparire nel commutatore di applicazioni della scheda di comando.Snow Leopard & LSUIElement -> l'applicazione non si attiva correttamente, finestra non "attiva" nonostante sia "chiave"
Sembra essere solo un problema di Snow Leopard.
L'applicazione inserisce un NSStatusItem nella barra dei menu e fa apparire un menu quando viene cliccato. Selezionare "Preferenze ..." dovrebbe far apparire una NSWindow con le preferenze.
La prima cosa che sembra non funzionare è che la finestra non viene ordinata nella parte anteriore, ma appare dietro tutte le altre finestre dell'applicazione.
ho cercato di risolvere il problema chiamando
[[NSApplication sharedApplication] activateIgnoringOtherApps: YES]
ma che non ha funzionato.
Dopo un po 'ho capito che il menu sta bloccando il messaggio per il ciclo di esecuzione venga inviato, così ho scritto un altro metodo sul MainController e ha inviato il messaggio con un ritardo:
[auto performSelector: @ selettore (setFront :) withObject: [preferencesController window] afterDelay: 1.0];
-(void)setFront: (id) theWindow {
[[NSApplication sharedApplication]activateIgnoringOtherApps:YES];
[theWindow orderFrontRegardless];
[theWindow makeKeyWindow];
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
}
Annotare il send-ogni-possibile-messaggio-to-make-it-do-ciò-che-deve-essere-facendo-approccio.
Questo funziona, tipo, la finestra viene portata in primo piano in cima a tutte le altre finestre da tutte le app, MA la maggior parte delle volte non è attiva, il che significa che la barra del titolo è disattivata. Fare clic sulla barra del titolo non renderà attiva la finestra. Cliccando all'interno della finestra lo renderà attivo !?
Questo non sembra essere un problema in Leopard; solo chiamando activateIgnoringOtherApps e facendo in modo che la chiave della finestra sembrasse funzionare bene.
In Snow Leopard c'è una nuova API progettato per sostituire LSUIElement che dovrebbe emulare il suo comportamento:
http://developer.apple.com/mac/library/releasenotes/cocoa/appkit.html
Ho giocato in giro con questo, ma è SL-only e mi rifugio' Sono stato in grado di impostare LSUIElement.
Quello che stai cercando di fare può essere percepito come rubare la messa a fuoco, che è stata resa piuttosto difficile. Ed è una buona cosa Cosa fa il tuo menu? '[preferencesController showWindow:]'? – zneak
Difficile rubare la messa a fuoco quando l'utente seleziona "Preferenze ..." e ordinate la finestra delle preferenze in primo piano e fatela diventare la chiave, ma sì, le persone simpatiche di Apple potrebbero cercare di impedirvi di farlo. –