Il mini-player di iTunes (per fare solo un esempio) supporta il click-through in cui l'applicazione non viene portata in primo piano quando vengono utilizzati i controlli riproduzione/pausa e volume.Pulsanti click-through e non sollevamento della finestra
Come è fatto?
ho cercato attraverso la documentazione di Apple e ho un po 'di andare avanti, in Cocoa Event-Handling Guide, Event Dispatch afferma:
Alcuni eventi, molti dei quali sono definiti dal Kit applicazione (tipo NSAppKitDefined), devono fare con le azioni controllate da una finestra o dall'oggetto dell'applicazione stesso. Esempi di questi eventi sono quelli relativi all'attivazione, disattivazione, occultamento e visualizzazione dell'applicazione. NSApp filtra questi eventi all'inizio della sua routine di invio e li gestisce autonomamente.
Così, dalla mia comprensione limitata (How an Event Enters a Cocoa, Application) sottoclassi NSApplication e prioritario - (void)sendEvent:(NSEvent *)theEvent
dovrebbe trappola ogni mouse e tastiera evento, ma ancora, la finestra è sollevata al clic. Quindi la finestra viene sollevata prima che l'evento venga visto da NSApplication o mi manca qualcos'altro.
Ho guardato di Matt Gallagher Demystifying NSApplication by recreating it, purtroppo Matt non ha coperto la coda di eventi, in modo diverso da quello, io sono perplesso.
Qualsiasi aiuto sarebbe apprezzato, grazie.
A cura di aggiungere: trovato un post a Lloyd's Lounge in cui parla lo stesso problema e link ad un post a CocoaBuilder, capture first right mouse down. Al momento sto provando il codice fornito lì, dopo un po 'di giocherellando e riattivando NSLog per [il tipoEvent], l'attività del tasto sinistro del mouse viene catturata.
Ora, facendo clic con il tasto sinistro sulla finestra per portarla in avanti, viene generata una sequenza di tipi di eventi, 13, 1, 13
, questi sono nuovamente NSAppKitDefined, NSLeftMouseDown e NSAppKitDefined. Posso filtrarli o trovare dove stanno andando?
accettaFirstMouse: e accettaPrimoResponder: non ha alcun effetto, è stato (e avrei dovuto notare) il mio primo tentativo a questo problema. Grazie comunque. –