2010-05-16 5 views
2

J'ai une petite application de cacao qui fonctionne habituellement en arrière-plan (en tant qu'agent). Parfois, j'aimerais pouvoir faire apparaître un menu contextuel (aucune fenêtre ou autre visible pour l'instant).NSMenu ne commence pas le suivi

Comme je ne Snow Leopard je ciblage essayé ceci:

if (windows) { 
     NSMenu *theMenu = [[[NSMenu alloc] initWithTitle:@"test"] autorelease]; 
     [theMenu setShowsStateColumn:NO]; 
     [theMenu setAutoenablesItems:NO]; 

      for (id item in windows) { 

       NSString *labelText = @"some text"; 

       NSMenuItem *theMenuItem = [[[NSMenuItem alloc] initWithTitle:labelText 
              action:@selector(menuItemSelected:) 
               keyEquivalent:@""] autorelease]; 

       [theMenuItem setTarget:self]; 
       [theMenuItem setRepresentedObject:item]; 
       [theMenuItem setEnabled:YES]; 
       [theMenuItem setImage:icon]; 
       [theMenu addItem:theMenuItem]; 
      } 

     [theMenu popUpMenuPositioningItem:nil atLocation:[NSEvent mouseLocation] inView:nil]; 

} 

Le menu popsup parfaitement, mais si je passe la souris les éléments avec le curseur de la souris, ils ne pas mettre en évidence et je ne peux pas cliquer dessus.

Le menuItemSelected: méthode ressemble à ceci:

-(IBAction)menuItemSelected:(id)sender { 

} 

Toute idée de ce que je fais mal?

Répondre

0

Je soupçonne que le système de fenêtrage ne considère pas votre application comme active, et n'envoie donc pas d'événements de souris au menu que vous avez créé.

À titre expérimental, essayez de créer une fenêtre fictive avant de faire apparaître le menu. Je créerais un NSPanel, éventuellement avec le style . makeKeyAndOrderFront: votre fenêtre/panneau, puis ouvrez le menu et voir ce qui se passe.

Si cela fonctionne, je resterais avec l'approche et cacherais la fenêtre.

+0

Merci! Je vais essayer ça. Pour l'instant j'ai créé une fenêtre qui ressemble et se comporte comme un nsmenu ... J'ai déjà essayé de créer un NSPanel non-activant mais je pense que j'ai peut-être manqué makeKeyAndOrderFront .. Si je me souviens bien, je n'ai utilisé que orderFront. Je signalerai si votre solution fonctionne bientôt. – Measunny

+0

Malheureusement, cela ne semble pas fonctionner non plus :-( Cela fonctionne si j'ajoute un NSButton à la fenêtre, définir mon menu comme le menu du bouton, puis cliquez avec le bouton droit sur le bouton (menuForEvent est appelé alors) Mais je pense que je peux Ne faites pas ça par programme non plus (sans que l'utilisateur clique droit sur le bouton ... ok envoie un mousevent sur le bouton, mais c'est vraiment moche) – Measunny

Questions connexes