summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefano Pigozzi <stefano.pigozzi@gmail.com>2015-03-08 15:19:17 +0100
committerStefano Pigozzi <stefano.pigozzi@gmail.com>2015-03-08 15:19:17 +0100
commit8ec9bce2d367541f9d3939f773b669beebd0be6d (patch)
treef54d271ed9d794a26f2229c3247b2575fc4c30d0
parentce239f1577ccd7eabccaac5b3b34fbe3959d860e (diff)
downloadmpv-8ec9bce2d367541f9d3939f773b669beebd0be6d.tar.bz2
mpv-8ec9bce2d367541f9d3939f773b669beebd0be6d.tar.xz
cocoa: fix autohide in fullscreen
-rw-r--r--video/out/cocoa/events_view.m3
-rw-r--r--video/out/cocoa/mpvadapter.h2
-rw-r--r--video/out/cocoa/window.m4
-rw-r--r--video/out/cocoa_common.m22
4 files changed, 26 insertions, 5 deletions
diff --git a/video/out/cocoa/events_view.m b/video/out/cocoa/events_view.m
index 7c8283ad72..6fec712a33 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 <Cocoa/Cocoa.h>
#include "video/out/vo.h"
-@interface MpvCocoaAdapter : NSObject
+@interface MpvCocoaAdapter : NSObject<NSWindowDelegate>
- (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 e4b0e9eca5..608e380414 100644
--- a/video/out/cocoa_common.m
+++ b/video/out/cocoa_common.m
@@ -60,6 +60,7 @@ struct vo_cocoa_state {
NSWindow *window;
NSView *view;
MpvVideoView *video;
+ MpvCocoaAdapter *adapter;
NSOpenGLContext *gl_ctx;
NSScreen *current_screen;
@@ -258,7 +259,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;
@@ -457,6 +458,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));
@@ -685,6 +687,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;
}
@@ -853,4 +862,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