reacciona pero mueve mac izquierdo hacer funciona doble derecho como boton arreglar cocoa osx click-through

cocoa - pero - Haga que la aplicación OSX responda al primer clic del mouse cuando no está enfocado



mouse se mueve pero no reacciona al hacer click (3)

Las aplicaciones OSX normales consumen el primer clic del mouse cuando no están enfocadas para enfocar primero la aplicación. Luego los futuros clics son procesados ​​por la aplicación. El botón Reproducir / Pausa de iTunes y el Finder se comportan de manera diferente; el primer clic se activa aunque no esté enfocado. Estoy buscando una forma de forzar a una aplicación existente (Remote Desktop Connection.app) a actuar sobre el primer clic y no solo enfocar.


Compruebe NSS acceptFirstMouse, puede ser lo que está buscando.

acceptsFirstMouse: Anulado por subclases para devolver SÍ si el receptor debe enviarse un mouseDown: mensaje para un evento inicial de mouse, NO si no.

  • (BOOL) acceptsFirstMouse: (NSEvent *) theEvent

Parámetros theEvent El evento inicial del mouse-down, que debe estar sobre el receptor en su ventana.

Discusión El receptor puede devolver un valor incondicionalmente o usar la ubicación del evento para determinar si desea o no el evento. La implementación predeterminada ignora theEvent y devuelve NO.

Anule este método en una subclase para permitir que las instancias respondan al clic de destino. Esto permite al usuario hacer clic en una vista en una ventana inactiva, activando la vista con un clic, en lugar de hacer clic primero para activar la ventana y luego hacer clic en la vista. La mayoría de los objetos de vista rechazan un intento de clic, por lo que el evento simplemente activa la ventana. Sin embargo, muchos objetos de control, como las instancias de NSButton y NSSlider, los aceptan, por lo que el usuario puede manipular el control de inmediato sin tener que soltar el botón del mouse.


Responder al primer clic del mouse cuando no está enfocado se llama ''clic''. Y su valor se debate acaloradamente, por ejemplo aquí y aquí .


// Suponiendo que tengas 1 controlador de vista que siempre está dando vueltas. Encima de la vista de carga. Nota: esto no funcionará antes de Yosemite.

- (void)loadView { NSLog(@"loadView"); self.view = [[NSView alloc] initWithFrame: [[app.window contentView] frame]]; [self.view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; int opts = (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways); trackingArea0 = [[NSTrackingArea alloc] initWithRect:self.view.bounds options:opts owner:self userInfo:nil]; [self.view addTrackingArea:trackingArea0]; } - (void)mouseEntered:(NSEvent *)theEvent { NSLog(@"entered"); if ([[NSApplication sharedApplication] respondsToSelector:@selector(activateIgnoringOtherApps:)]) { [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; } }