2013-01-16 13 views
8

Mi stavo chiedendo se è possibile rendere il mio show NSWindow sopra assolutamente tutto. Ho corrente impostare il livello di finestra per CGShieldingWindowLevel utilizzando il codice ...Rendi veramente NSWindow il livello più alto (sopra il mouse, sopra il controllo missione/esporre)

[self setLevel:CGShieldingWindowLevel()]; 

... e questo fa un grande lavoro per la maggior parte, ma non è abbastanza. La finestra non viene disegnata quando il controllo missione o esporre è attivo e viene disegnato sotto il mouse. Mi stavo chiedendo se fosse possibile crearsi un vero "livello superiore" che sarebbe stato disegnato sopra tutti questi elementi.

Qualsiasi aiuto sarebbe molto apprezzato. Grazie!

+1

Considerando che il mouse è uno degli aspetti più fondamentali di qualsiasi computer moderno, sarei sorpreso se potessi ... Ma dato che i livelli NSWindow sono interi ... Hai provato ad aggiungerne uno? – CodaFi

+0

Buona idea, ma purtroppo, ancora un no-go. Per puro caso ho controllato quali erano i valori interi di queste costanti. Risulta NSScreenSaverWindowLevel = 1000, e CGShieldingWindowLevel() = un enorme 2147483629. Ho provato ad aggiungerne uno a entrambi senza alcun risultato, oltre a moltiplicare CGShieldingWindowLevel() di due, il che mi ha lasciato senza finestre. Altre idee? Grazie! –

+3

Veramente il livello più alto è sopra la superficie del monitor. – Davyd

risposta

5

Riguardo alla domanda su Expose, probabilmente non hai impostato correttamente il comportamento della raccolta. Fare una sottoclasse di NSWindow, e da qualche parte nella vostra inizializzazione fare qualcosa lungo il seguente:

self.collectionBehavior = (NSWindowCollectionBehaviorStationary | NSWindowCollectionBehaviorIgnoresCycle); 

Se si desidera che la finestra su tutti gli spazi (che probabilmente si fa) non dimenticare di aggiungere anche NSWindowCollectionBehaviorCanJoinAllSpaces.

In termini di domande sul mouse, sfortunatamente non penso che ci sia un modo per disegnarlo sopra.

+0

Fantastico, grazie! Sebbene questo compia solo 1/3 di ciò di cui avevo bisogno, sto iniziando a rendermi conto che gli altri 2/3 non sono esattamente possibili ... –

+1

@AtlasWegman: L'altra parte era il mouse e cos'altro? A tutti gli effetti credo che disegnare sopra il mouse sia impossibile. Ho appena controllato un'altra utility come la tua, Shady, e non disegna sopra il mouse. –

+0

L'altro grande (che sto iniziando a realizzare è impossibile con la classe NSWindow di serie) sta disegnando su Mission Control. Qualche idea su come qualcosa di simile potrebbe essere realizzato? Grazie! –