2008-09-24 15 views
11

Las aplicaciones OSX normales comen 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.Hacer que la aplicación OSX responda al primer clic del mouse cuando no está enfocado

+0

Sus ejemplos no son del todo correctos. iTunes solo admite el clic en algunos lugares, como cuando la ventana está en modo mini. – benzado

Respuesta

4

Responder al primer clic del mouse cuando no está enfocado se denomina 'clic a través'. Y su valor se debate acaloradamente, por ejemplo here y here.

14

Compruebe NSView's 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 ratón hacia abajo, que deben 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.

0

// Suponiendo que tiene 1 controlador de vista que siempre está dando vueltas. Encima de la vista de carga. nótese bien esto no funcionará pre-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]; 
     } 

} 
+0

Esta es, francamente, una solución sin esperanza. –

+0

Podría intentar sobrescribir la vista de contenido de nswindow para hacerlo menos frágil. – johndpope

Cuestiones relacionadas