diff options
-rw-r--r-- | video/out/cocoa/window.m | 14 | ||||
-rw-r--r-- | video/out/cocoa_common.m | 15 |
2 files changed, 20 insertions, 9 deletions
diff --git a/video/out/cocoa/window.m b/video/out/cocoa/window.m index aae6582dde..1ff57acde9 100644 --- a/video/out/cocoa/window.m +++ b/video/out/cocoa/window.m @@ -49,20 +49,22 @@ styleMask:(NSUInteger)style_mask backing:(NSBackingStoreType)buffering_type defer:(BOOL)flag + screen:(NSScreen *)screen { if (self = [super initWithContentRect:content_rect styleMask:style_mask backing:buffering_type - defer:flag]) { + defer:flag + screen:screen]) { [self setBackgroundColor:[NSColor blackColor]]; [self setMinSize:NSMakeSize(50,50)]; [self setCollectionBehavior: NSWindowCollectionBehaviorFullScreenPrimary]; - self.targetScreen = [self screen]; - self.currentScreen = [self screen]; + self.targetScreen = screen; + self.currentScreen = screen; _is_animating = 0; _unfs_content_frame = [self convertRectToScreen:[[self contentView] frame]]; - _unfs_screen_frame = [[self screen] frame]; + _unfs_screen_frame = [screen frame]; } return self; } @@ -171,8 +173,10 @@ if (!_is_animating && ![[self currentScreen] isEqual:[self screen]]) { self.previousScreen = [self screen]; } + if (![[self currentScreen] isEqual:[self screen]]) { + [self.adapter windowDidChangeScreen:notification]; + } self.currentScreen = [self screen]; - [self.adapter windowDidChangeScreen:notification]; } - (void)windowDidChangeScreenProfile:(NSNotification *)notification diff --git a/video/out/cocoa_common.m b/video/out/cocoa_common.m index 5dda9c578c..6eb3dac6a9 100644 --- a/video/out/cocoa_common.m +++ b/video/out/cocoa_common.m @@ -433,8 +433,6 @@ static void vo_cocoa_update_displaylink(struct vo *vo) vo_cocoa_uninit_displaylink(s); vo_cocoa_init_displaylink(vo); - - flag_events(vo, VO_EVENT_WIN_STATE); } static double vo_cocoa_update_screen_fps(struct vo *vo) @@ -618,8 +616,16 @@ static void cocoa_screen_reconfiguration_observer( { if (flags & kCGDisplaySetModeFlag) { struct vo *vo = ctx; - MP_WARN(vo, "detected display mode change, updating screen info\n"); - vo_cocoa_update_displaylink(vo); + struct vo_cocoa_state *s = vo->cocoa; + + NSDictionary* sinfo = [s->current_screen deviceDescription]; + NSNumber* sid = [sinfo objectForKey:@"NSScreenNumber"]; + CGDirectDisplayID did = [sid longValue]; + + if (did == display) { + MP_VERBOSE(vo, "detected display mode change, updating screen refresh rate\n"); + flag_events(vo, VO_EVENT_WIN_STATE); + } } } @@ -972,6 +978,7 @@ int vo_cocoa_control(struct vo *vo, int *events, int request, void *arg) { vo_cocoa_update_screen_info(self.vout); vo_cocoa_update_displaylink(self.vout); + flag_events(self.vout, VO_EVENT_WIN_STATE); } - (void)windowDidEnterFullScreen:(NSNotification *)notification |