2013-08-08 4 views
11

Ho creato una semplice applicazione Cocoa in XCode 4.6 con un NSPanel anziché il valore predefinito NSWindow. Quando mi permetto alla opzione di non-Attivazione e iniziare il tutto applicazione funziona benissimo:NSPanel in modalità "Non attiva" non mostra sempre i cursori corretti

Il pannello viene visualizzato davanti a tutto il resto e quando il cursore del mouse passa sopra i bordi del pannello si trasforma da un normale freccia-cursore al cursore di ridimensionamento appropriato, in modo che l'utente sappia che può ridimensionare il pannello .

Questo funziona bene a meno che non clic su qualsiasi altra applicazione come ad esempio Safari o Finder.

Dal momento in cui una volta che io do fuoco a un'altra applicazione, posso fare clic su e posiziona il mouse sopra il mio pannello di quanto voglio, lo stile cursore non cambierà più - rimane sempre una freccia e non è possibile tornare al comportamento normale.

Il pannello rimane selezionabile e nella parte anteriore, è ancora possibile spostarlo e ridimensionarlo, ma il cursore del mouse rimane una freccia tutto il tempo. Quindi non è possibile nemmeno modificarlo manualmente utilizzando utilizzando: [[NSCursor crosshairCursor] set].

quindi ho bisogno di trovare un modo per creare un NSPanel che mantiene il normale automatica-cambio-cursorstyle-quando-bilico-over-panel-bordi-comportamento anche quando si dà fuoco a un'altra applicazione.

Ho già provato ad usare un personalizzata NSPanel di classe, dove ho sovrascritto i metodi canBecomeKeyWindow e canBecomeMainWindow, in modo che restituiscano SI ma anche quando faccio il mio pannello KeyWindow e MainWindow ...

[myPanel makeKeyAndOrderFront:self]; 
[myPanel makeMainWindow]; 

... non risolve il problema del cursore.

Sarebbe bello se qualcuno mi potrebbe aiutare qui :)

PS .: l'SDK di base e la destinazione di distribuzione sono impostati a 10,8 nel mio progetto


Così ho scoperto che la descrisse il problema non ha nulla a che vedere con lo stato della finestra del pannello. Non importa se è impostato su key o main, invece il problema con il cursore (rimane sempre la freccia) è correlato allo stato di attivazione dell'applicazione.

Tutto funziona correttamente purché l'applicazione proprietaria del pannello sia attiva ma se si fa clic su un'altra applicazione la mia applicazione è disattivata e non viene nuovamente attivata - anche se si fa clic sul pannello - perché "non-activating" - l'opzione è abilitata.

Il problema è che ho bisogno dell'opzione "non activating" perché sto creando un'app che cattura lo stato della barra dello schermo che dovrebbe essere visualizzata e funzionare di fronte a qualsiasi altra cosa, ma senza disattivare alcuna applicazione in esecuzione.Ho potuto risolvere il problema cursore

[NSApp activateIgnoringOtherApps];

ma poi prendere uno screenshot di un video a schermo intero in esecuzione in Safari sarebbe disattivare Safari e ridurre al minimo il video, che io non voglio.

+0

Ho lo stesso problema. Potrebbe postare se trovo qualcosa. –

risposta

1

Non penso sia possibile tramite le normali API cambiare il cursore quando l'app non è attiva. Sono abbastanza sicuro che il sistema a finestre non lo consenta: sarebbe una violazione dei confini tra le app, se provate a impostare un cursore dallo sfondo e l'app in primo piano cerca anche di impostare un cursore, vincere?

Ovviamente il sistema può farlo (come quando si fa uno screenshot con ⌘⇧4), perché è nel sistema stesso della finestra.

Problemi correlati