Zwykłe aplikacje OSX zjadają pierwsze kliknięcie myszą, gdy nie są skupione na pierwszym ustawieniu ostrości aplikacji. Następnie przyszłe kliknięcia są przetwarzane przez aplikację. Przycisk play/pause iTunes i Finder zachowują się inaczej, pierwsze kliknięcie działa, nawet gdy nie jest ustawione. Szukam sposobu zmuszenia istniejącej aplikacji (Remote Desktop Connection.app) do działania na pierwszym kliknięciu, a nie tylko skupienia.Spraw, aby aplikacja OSX reagowała na pierwsze kliknięcie myszą, gdy nie jest aktywna.
Odpowiedz
Sprawdź, czy NSView akceptujeFirstMouse, może być tym, czego szukasz.
acceptsFirstMouse: Zastąpiony przez podklasy, aby powrócić TAK, jeśli odbiornik ma zostać wysłany jako mouseDown: wiadomość o początkowym zdarzeniu, NIK, jeśli nie.
- (Bool) acceptsFirstMouse (NSEvent *) theEvent
Parametry theEvent Początkowe zdarzenia myszy w dół, która musi być przez odbiornik w każdym oknie.
Dyskusja Odbiornik może albo zwrócić wartość bezwarunkowo, albo użyć lokalizacji zdarzenia, aby określić, czy chce tego zdarzenia. Domyślna implementacja ignoruje zdarzenia i zwraca wartość NIE.
Zastąp tę metodę w podklasie, aby umożliwić instancji reagowanie na kliknięcia. Dzięki temu użytkownik może kliknąć widok w nieaktywnym oknie, aktywując widok za pomocą jednego kliknięcia, zamiast klikać najpierw, aby okno było aktywne, a następnie klikając widok. Większość obiektów widoku odrzuca próbę kliknięcia, więc wydarzenie po prostu aktywuje okno. Wiele obiektów kontrolnych, takich jak instancje NSButton i NSSlider, akceptuje je, więc użytkownik może natychmiast manipulować formantem bez konieczności zwolnienia przycisku myszy.
// Zakładając, że masz 1 kontroler widoku, który zawsze się kręci. Over ride the loadview. N.B. to nie zadziała 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];
}
}
To jest, szczerze mówiąc, beznadziejne rozwiązanie. –
Możesz spróbować przesłonić widok zawartości nswindow, aby był mniej delikatny. – johndpope
Twoje przykłady nie są całkowicie poprawne. iTunes obsługuje klikanie tylko w kilku miejscach, np. gdy okno jest w trybie mini. – benzado