NSMenu не начинает отслеживать - PullRequest
2 голосов
/ 16 мая 2010

У меня есть небольшое приложение с какао, которое обычно работает в фоновом режиме (в качестве агента). Иногда я хотел бы иметь возможность открыть контекстное меню (в это время окна или другие элементы не отображаются).

Поскольку я нацеливаюсь только на снежного барса, я попробовал это:

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];

 }

Меню всплывающее меню идеально, но если я наведу курсор мыши на элементы, они не будут выделены, и я не могу щелкнуть их.

menuItemSelected: метод выглядит так:

-(IBAction)menuItemSelected:(id)sender {

}

Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 22 мая 2010

Я подозреваю, что система управления окнами не считает ваше приложение активным и, следовательно, не отправляет события мыши в созданное вами меню.

В качестве эксперимента попробуйте создать фиктивное окно, прежде чем открыть меню. Я бы создал NSPanel, возможно, со стилем NSNonActivatingPanelMask. makeKeyAndOrderFront: Ваше окно / панель, затем откройте меню и посмотрите, что произойдет.

Если это сработает, я буду придерживаться подхода и скрою окно.

...