¿Cómo puedo mostrar NSMenu en el cursor del mouse?
Estoy trabajando en una aplicación donde quiero mostrar un "menú contextual" de NSMenu junto a la ubicación actual del mouse. En este punto, sé cómo activar el comando desde WebView para mostrar el menú contextual, parece que no puedo mostrar el menú en la ubicación correcta en la pantalla. Parece que mis coordenadas están invertidas verticalmente de lo que necesito. Esto parece un problema tan simple, pero he pasado bastante tiempo tratando de mejorar una solución de "mejores prácticas". ¿Debo averiguar en qué pantalla se encuentra el mouse y calcular la coordenada y manualmente?
Aquí está mi código realmente simple que se acerca:
- (IBAction)showMenu:(id)sender
{
CGEventRef ourEvent = CGEventCreate(NULL);
CGPoint point = CGEventGetLocation(ourEvent);
NSPoint wp = {0,0};
wp = [self.window convertScreenToBase:point];
NSLog(@"Location? x= %f, y = %f", (float)point.x, (float)point.y);
NSLog(@"Location? x= %f, y = %f", (float)wp.x, (float)wp.y);
NSEvent *event = [NSEvent mouseEventWithType:NSLeftMouseUp location:CGPointMake(wp.x, wp.y) modifierFlags:0 timestamp:NSTimeIntervalSince1970 windowNumber:[_window windowNumber] context:nil eventNumber:0 clickCount:0 pressure:0.1];
//NSEvent *event = [NSEvent eventWithCGEvent:ourEvent];
NSMenu *theMenu = [[NSMenu alloc] initWithTitle:@"Contextual Menu"];
[theMenu insertItemWithTitle:@"Item 1" action:@selector(beep:) keyEquivalent:@"" atIndex:0];
[theMenu insertItemWithTitle:@"Item 2" action:@selector(beep:) keyEquivalent:@"" atIndex:1];
[NSMenu popUpContextMenu:theMenu withEvent:event forView:nil];
}
¿Puede alguien proporcionarme un código de muestra para la forma más natural de hacer esto?