summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorAkemi <der.richter@gmx.de>2017-02-23 19:48:36 +0100
committerAkemi <der.richter@gmx.de>2017-02-27 23:57:44 +0100
commit9d549e68377d3c2164aa7b1ec11d49fe2bdf7a0a (patch)
treea3017ac7781e4089af94dec94c33c06c4c03d70d /video
parent9bd819a0bc809ab5af300e5d73e88f120c5d0285 (diff)
downloadmpv-9d549e68377d3c2164aa7b1ec11d49fe2bdf7a0a.tar.bz2
mpv-9d549e68377d3c2164aa7b1ec11d49fe2bdf7a0a.tar.xz
cocoa: only move window into screen bounds when changing screens
when forcibly moving windows to a different screen with --screen or --fs-screen we need to move the window into the screen bounds if the window is out of bounds, otherwise it can end up on the wrong screen. previously it always recalculated the bounds and moved the window when toggling fullscreen, now it only does the bound calculation when changing screens. Fixes #4178
Diffstat (limited to 'video')
-rw-r--r--video/out/cocoa/window.m12
1 files changed, 9 insertions, 3 deletions
diff --git a/video/out/cocoa/window.m b/video/out/cocoa/window.m
index 88b1596d40..ec4d8ae530 100644
--- a/video/out/cocoa/window.m
+++ b/video/out/cocoa/window.m
@@ -93,7 +93,9 @@
//move window to target screen when going to fullscreen
if (![self.adapter isInFullScreenMode] && ![[self targetScreen] isEqual:[self screen]]) {
- [self setFrame:[self calculateWindowPositionForScreen:[self targetScreen]] display:YES];
+ NSRect frame = [self calculateWindowPositionForScreen:[self targetScreen]
+ withoutBounds:NO];
+ [self setFrame:frame display:YES];
}
[super toggleFullScreen:sender];
@@ -115,7 +117,8 @@
- (void)setToWindow
{
[self setStyleMask:([self styleMask] & ~NSWindowStyleMaskFullScreen)];
- NSRect frame = [self calculateWindowPositionForScreen:[self targetScreen]];
+ NSRect frame = [self calculateWindowPositionForScreen:[self targetScreen]
+ withoutBounds:[[self targetScreen] isEqual:[self screen]]];
[self setFrame:frame display:YES];
[self setContentAspectRatio:_unfs_content_frame.size];
[self setCenteredContentSize:_unfs_content_frame.size];
@@ -277,7 +280,7 @@
animate:NO];
}
-- (NSRect)calculateWindowPositionForScreen:(NSScreen *)screen
+- (NSRect)calculateWindowPositionForScreen:(NSScreen *)screen withoutBounds:(BOOL)withoutBounds
{
NSRect frame = [self frameRectForContentRect:_unfs_content_frame];
NSRect targetFrame = [screen frame];
@@ -292,6 +295,9 @@
frame.origin.y = targetFrame.origin.y +
(targetFrame.size.height - frame.size.height)*y_per;
+ if (withoutBounds)
+ return frame;
+
//screen bounds right and left
if (frame.origin.x + frame.size.width > targetFrame.origin.x + targetFrame.size.width)
frame.origin.x = targetFrame.origin.x + targetFrame.size.width - frame.size.width;