2010-12-14 57 views
1

Je suis confrontée à un problème de conception un peu ennuyeux. Pas facile de donner un titre à ma question.Masquer la fenêtre jusqu'à ce que la fenêtre supérieure s'affiche

Je dois afficher deux fenêtres, une sur l'autre. Le premier est une fenêtre de cacao, le second est fait avec Qt. Dans la deuxième fenêtre, une action est effectuée, mais l'utilisateur peut choisir de fermer cette fenêtre. Il doit retomber sur la première fenêtre.

Pour afficher ma première fenêtre, qui est en fait un SFAuthorizationPluginView, je fais:

[myview displayView]; 

puis, pour afficher la fenêtre faite avec Qt sur la première fenêtre:

QWidget* w = openMyScreen(); 
NSView* v = (NSView*)w->winId(); 
[[v window] setLevel:2003]; 

Cela fonctionne bien, cependant il y a un petit délai avant que la deuxième fenêtre soit affichée. On peut ainsi voir pendant très peu de temps la première fenêtre.

J'ai besoin que la deuxième fenêtre reste au-dessus de la première fenêtre, parce que l'utilisateur peut fermer la deuxième fenêtre et doit avoir accès à la première fenêtre.

Des idées sur un truc comment cacher la première fenêtre, juste l'heure, la deuxième fenêtre apparaît?

Merci à l'avance

Répondre

2

NSDisableScreenUpdates et NSEnableScreenUpdates (link) pourraient être utiles dans cette situation. La documentation dit:

Vous appelez généralement cette fonction afin que les opérations sur les fenêtres multiples apparaissent atomiques à l'utilisateur.

qui semble décrire votre situation. Un mot de conseil sans rapport cependant: Ne pas aller régler les niveaux de fenêtre bon gré mal gré. Un niveau de fenêtre de 2003 fera probablement apparaître la fenêtre sur des choses comme le dock ou même la barre de menu, ce qui serait certainement étrange. Vous devez respecter les niveaux standard déclarés au NSWindow.h sauf si vous avez de bonnes raisons. NSFloatingWindowLevel peut être approprié (bien que je ne sois pas sûr du niveau auquel la fenêtre SFAuthorizationPluginView est affichée).

+0

Merci kperryua, NSDisableScreenUpdates et NSEnableScreenUpdates résolu mon problème. Concernant le niveau, la valeur 2003 provient de http://web.archiveorange.com/archive/v/cW70L1Nj3YC74qIVlURA – skuallpa

0

A partir de MacOS 10.4, vous pouvez utiliser:

[NSWindow disableScreenUpdatesUntilFlush];