From 46cc45223c66083a8518e4e1a688eda06d6d264c Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sun, 8 Mar 2015 15:19:17 +0100 Subject: cocoa: fix autohide in fullscreen (cherry picked from commit 8ec9bce2d367541f9d3939f773b669beebd0be6d) --- video/out/cocoa/events_view.m | 3 ++- video/out/cocoa/mpvadapter.h | 2 +- video/out/cocoa/window.m | 4 ++-- video/out/cocoa_common.m | 22 +++++++++++++++++++++- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/video/out/cocoa/events_view.m b/video/out/cocoa/events_view.m index 30fca1a332..42f48bf096 100644 --- a/video/out/cocoa/events_view.m +++ b/video/out/cocoa/events_view.m @@ -166,7 +166,8 @@ - (BOOL)canHideCursor { - return !self.hasMouseDown && [self containsMouseLocation]; + return !self.hasMouseDown && [self containsMouseLocation] + && [[self window] isKeyWindow]; } - (void)mouseEntered:(NSEvent *)event diff --git a/video/out/cocoa/mpvadapter.h b/video/out/cocoa/mpvadapter.h index c5a0579a96..5b87e89d04 100644 --- a/video/out/cocoa/mpvadapter.h +++ b/video/out/cocoa/mpvadapter.h @@ -18,7 +18,7 @@ #import #include "video/out/vo.h" -@interface MpvCocoaAdapter : NSObject +@interface MpvCocoaAdapter : NSObject - (void)setNeedsResize; - (void)signalMouseMovement:(NSPoint)point; - (void)putKeyEvent:(NSEvent*)event; diff --git a/video/out/cocoa/window.m b/video/out/cocoa/window.m index 75adbbecb5..14a3ba91c8 100644 --- a/video/out/cocoa/window.m +++ b/video/out/cocoa/window.m @@ -63,12 +63,12 @@ - (void)windowDidResignKey:(NSNotification *)notification { - [self.adapter didChangeMousePosition]; + [self.adapter windowDidResignKey:notification]; } - (void)windowDidBecomeKey:(NSNotification *)notification { - [self.adapter didChangeMousePosition]; + [self.adapter windowDidBecomeKey:notification]; } - (BOOL)canBecomeMainWindow { return YES; } diff --git a/video/out/cocoa_common.m b/video/out/cocoa_common.m index ef8736d222..d07a136e8b 100644 --- a/video/out/cocoa_common.m +++ b/video/out/cocoa_common.m @@ -58,6 +58,7 @@ struct vo_cocoa_state { NSWindow *window; NSView *view; MpvVideoView *video; + MpvCocoaAdapter *adapter; NSOpenGLContext *gl_ctx; NSScreen *current_screen; @@ -169,7 +170,7 @@ static int vo_cocoa_set_cursor_visibility(struct vo *vo, bool *visible) if (*visible) { CGDisplayShowCursor(kCGDirectMainDisplay); - } else if ([v canHideCursor] && [s->window isKeyWindow]) { + } else if ([v canHideCursor]) { CGDisplayHideCursor(kCGDirectMainDisplay); } else { *visible = true; @@ -367,6 +368,7 @@ static void create_ui(struct vo *vo, struct mp_rect *win, int geo_flags) [parent addSubview:s->view]; // update the cursor position now that the view has been added. [view signalMousePosition]; + s->adapter = adapter; #if HAVE_COCOA_APPLICATION cocoa_register_menu_item_action(MPM_H_SIZE, @selector(halfSize)); @@ -595,6 +597,13 @@ static void vo_cocoa_fullscreen(struct vo *vo) draw_changes_after_next_frame(vo); [(MpvEventsView *)s->view setFullScreen:opts->fullscreen]; + if ([s->view window] != s->window) { + // cocoa implements fullscreen views by moving the view to a fullscreen + // window. Set that window delegate to the cocoa adapter to trigger + // calls to -windowDidResignKey: and -windowDidBecomeKey: + [[s->view window] setDelegate:s->adapter]; + } + s->pending_events |= VO_EVENT_ICC_PROFILE_CHANGED; s->pending_events |= VO_EVENT_RESIZE; } @@ -758,4 +767,15 @@ int vo_cocoa_control(struct vo *vo, int *events, int request, void *arg) struct vo_cocoa_state *s = self.vout->cocoa; [(MpvEventsView *)s->view signalMousePosition]; } + +- (void)windowDidResignKey:(NSNotification *)notification +{ + [self didChangeMousePosition]; +} + +- (void)windowDidBecomeKey:(NSNotification *)notification +{ + [self didChangeMousePosition]; +} + @end -- cgit v1.2.3