55 votes

NSWindow avec NSWindowCollectionBehaviorStationary est visible sur le tableau de bord. S'agit-il d'un bogue ?

J'essaie d'obtenir mon NSWindow à :

  1. Être visible sur tous les espaces
  2. Être visible lors de l'affichage du bureau (en appuyant sur F11 )
  3. Ne pas être visible dans Mission Control/Expose

C'est exactement ce que fait ce qui suit, mais avec un effet secondaire :

[self setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces
                            | NSWindowCollectionBehaviorStationary ];

Lorsque l'on passe au tableau de bord sous Mac OS X Lion, la fenêtre reste visible seule avec les éléments du tableau de bord pendant une seconde, puis elle est masquée.

S'agit-il d'un comportement attendu ou d'un bogue ? Les utilisateurs de mon application trouvent déroutant de voir la fenêtre sur le tableau de bord avant qu'elle ne disparaisse. Je m'attendais à ce qu'elles ne s'affichent que sur les Espaces et non sur le Tableau de bord.

3voto

Daij-Djan Points 18696

J'ai regardé http://cocoadev.com/wiki/DontExposeMe recherche d'une solution de contournement

rien n'a vraiment fonctionné sauf.

self.window.level = kCGDesktopWindowLevel;

Maintenant, peut-être que DETECT change pour exposer et régler cela alors :) ...

voir Comment détecter que Mission Control ou Command-Tab switcher remplace son programme dans OS X ? pour cela :) Peut-être qu'une réponse y sera apportée

1voto

Alex Points 848

J'ai pu reproduire ce comportement et je pense qu'il s'agit simplement d'une animation défectueuse du côté d'Apple.

Pour mieux vous expliquer, créez un nouveau projet, ajoutez ces deux lignes à applicationDidFinishLaunching: et l'exécuter.

[self.window setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces | NSWindowCollectionBehaviorStationary ];
[self.window setHidesOnDeactivate: YES];

(self.window est la fenêtre qui est créée automatiquement lors de la création d'un nouveau projet. cela n'a pas vraiment d'importance ici, du moment qu'il s'agit d'une fenêtre qui apparaît à l'écran)

Remarquez maintenant ce comportement : lorsque vous passez d'un espace où vous pouvez voir votre fenêtre à un autre dans lequel il y a d'autres fenêtres d'autres applications (et donc votre fenêtre est censée disparaître puisque votre application sera désactivée), votre fenêtre ne disparaît qu'à la fin de l'animation. Que se passe-t-il donc ?

Voici ce que je pense : lorsque l'on passe d'un espace à l'autre, les fenêtres qui s'affichent dans tous les espaces sont les suivantes ne réagit au changement qu'après l'animation d'où la brève apparition de votre fenêtre sur le tableau de bord. Je pense que vous remarquerez qu'elle disparaît exactement à la fin de l'animation de la diapositive.

Malheureusement, je ne sais pas comment résoudre votre problème. Il semble que cela se produise de cette manière.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X