2008-11-21 5 views
1

J'ai une fenêtre qui est définie avec NSBorderlessWindowMask, et aussi kCGDesktopWindowLevel. Lorsqu'un NSPanel est censé apparaître à partir de dire la sélection d'un menu Dock Icon ou un menu d'élément de barre d'état, le NSPanel ne s'affichera pas si l'application n'est pas la fenêtre la plus en avant. Ce programme n'a pour l'instant qu'un élément de menu Status (pensez à la façon dont QuickSilver est implémenté) et lorsque je choisis Preferences dans mon menu, il est configuré pour afficher le panneau Preferences en utilisant Makekeyandorderfront, mais à moins que vous ne veniez de lancer le application et fait rien d'autre, quand vous sélectionnez les préférences rien ne se passe.La fenêtre NSBorderlessWindowMask ne montrera pas NSPanels si elle n'est pas devant la plupart des fenêtres

J'ai découvert que lorsque je sélectionne mon élément de menu pour la vérification des mises à jour de Sparkle, la fenêtre de vérification du panneau de mise à jour apparaît, puis mon panneau de préférences que j'ai demandé d'ouvrir apparaît.

Donc, il semble que makekeyandorderfront ne l'amène pas vraiment à l'avant, peut-être.

Est-ce que quelqu'un sait comment résoudre ce problème? Dois-je appeler autre chose que makekeyandorderfront, ou peut-être quelque chose en conjonction avec elle?

Merci d'avance

Répondre

2

Les panneaux sont conçus par défaut pour fonctionner de cette manière. Ils sont conçus comme des fenêtres auxiliaires pour votre application et disparaissent toujours lorsque l'application est désactivée. Vous courrez probablement aussi dans des problèmes avec le panneau devenant clé ... mais pour guérir votre problème de panneau disparaissant, envoyez ce message à votre panneau:

[panelObject setHidesOnDeactivate:NO]; 

Vous devriez probablement utiliser des objets NSWindow réelle ici au lieu des objets NSPanel , mais comme je ne connais pas grand-chose à la façon dont fonctionne votre application, vous devrez vous y intéresser. Pour plus d'informations sur la différence entre les panneaux et les fenêtres, veuillez consulter la documentation ici: Window Programming Guide

+0

Y at-il un moyen de le garder avec hide sur désactiver mais le faire quand ils sélectionnent l'élément de menu, il apporte l'application à l'avant afin ils fonctionneront correctement/normalement? – kdbdallas

+0

Utilisez une fenêtre ordinaire et faites actionner la fenêtre dans l'action de l'élément de menu du menu Etat/Dock. Lorsque vous en avez fini, commandez-le. Si vous voulez qu'il disparaisse si l'utilisateur clique sur un autre emplacement, ajoutez applicationDidResignActive à votre délégué d'application et commandez-le lui aussi. –

+0

kdbdallas: Essayez [NSApp activateIgnoringOtherApps: NO]. Si cela ne fonctionne pas, essayez OUI. Si cela ne fonctionne pas, essayez SetFrontProcessWithOptions avec {0, kCurrentProcess} et kSetFrontProcessFrontWindowOnly. –

Questions connexes