summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefano Pigozzi <stefano.pigozzi@gmail.com>2015-03-08 11:00:29 +0100
committerDiogo Franco (Kovensky) <diogomfranco@gmail.com>2015-03-11 12:49:39 +0900
commit0e160123fd57abdee038f67943ba4310502ab7bc (patch)
treeb5405cd87a0057d85654e720622e70fd68b8e73e
parent710979e0e85d8ed4eea55f23e60a56d2e4de03f8 (diff)
downloadmpv-0e160123fd57abdee038f67943ba4310502ab7bc.tar.bz2
mpv-0e160123fd57abdee038f67943ba4310502ab7bc.tar.xz
cocoa: fix mouse hiding with launchpad and dock folders
Some UI elements in OS X – like Launchpad and Dock folders – are implemented using borderless windows in background demonized applications. When we use these elements, mpv doesn't stop to be the active application, but the mpv window leaves keyWindow state while we use the OS controls. This commit just keeps track of window state to update the cursor visibility accordingly. Fixes #513 (cherry picked from commit ce239f1577ccd7eabccaac5b3b34fbe3959d860e)
-rw-r--r--video/out/cocoa/mpvadapter.h1
-rw-r--r--video/out/cocoa/window.m10
-rw-r--r--video/out/cocoa_common.m8
3 files changed, 18 insertions, 1 deletions
diff --git a/video/out/cocoa/mpvadapter.h b/video/out/cocoa/mpvadapter.h
index f54c26593f..c5a0579a96 100644
--- a/video/out/cocoa/mpvadapter.h
+++ b/video/out/cocoa/mpvadapter.h
@@ -28,6 +28,7 @@
- (void)handleFilesArray:(NSArray *)files;
- (void)didChangeWindowedScreenProfile:(NSScreen *)screen;
- (void)performAsyncResize:(NSSize)size;
+- (void)didChangeMousePosition;
- (BOOL)isInFullScreenMode;
- (BOOL)keyboardEnabled;
diff --git a/video/out/cocoa/window.m b/video/out/cocoa/window.m
index 8d3b507e27..75adbbecb5 100644
--- a/video/out/cocoa/window.m
+++ b/video/out/cocoa/window.m
@@ -61,6 +61,16 @@
[self.adapter didChangeWindowedScreenProfile:[self screen]];
}
+- (void)windowDidResignKey:(NSNotification *)notification
+{
+ [self.adapter didChangeMousePosition];
+}
+
+- (void)windowDidBecomeKey:(NSNotification *)notification
+{
+ [self.adapter didChangeMousePosition];
+}
+
- (BOOL)canBecomeMainWindow { return YES; }
- (BOOL)canBecomeKeyWindow { return YES; }
- (BOOL)windowShouldClose:(id)sender
diff --git a/video/out/cocoa_common.m b/video/out/cocoa_common.m
index 86082435e8..ef8736d222 100644
--- a/video/out/cocoa_common.m
+++ b/video/out/cocoa_common.m
@@ -169,7 +169,7 @@ static int vo_cocoa_set_cursor_visibility(struct vo *vo, bool *visible)
if (*visible) {
CGDisplayShowCursor(kCGDirectMainDisplay);
- } else if ([v canHideCursor]) {
+ } else if ([v canHideCursor] && [s->window isKeyWindow]) {
CGDisplayHideCursor(kCGDirectMainDisplay);
} else {
*visible = true;
@@ -752,4 +752,10 @@ int vo_cocoa_control(struct vo *vo, int *events, int request, void *arg)
struct vo_cocoa_state *s = self.vout->cocoa;
s->pending_events |= VO_EVENT_ICC_PROFILE_CHANGED;
}
+
+- (void)didChangeMousePosition
+{
+ struct vo_cocoa_state *s = self.vout->cocoa;
+ [(MpvEventsView *)s->view signalMousePosition];
+}
@end