diff --git a/gdk/macos/GdkMacosWindow.c b/gdk/macos/GdkMacosWindow.c index 23b3f5a3f3..0eb1ec7ca8 100644 --- a/gdk/macos/GdkMacosWindow.c +++ b/gdk/macos/GdkMacosWindow.c @@ -171,6 +171,11 @@ typedef NSString *CALayerContentsGravity; return inMove; } +- (BOOL)inFullscreenTransition; +{ + return inFullscreenTransition; +} + -(void)checkSendEnterNotify { /* When a new window has been created, and the mouse is in the window @@ -759,31 +764,37 @@ typedef NSString *CALayerContentsGravity; -(void)windowWillEnterFullScreen:(NSNotification *)aNotification { + inFullscreenTransition = YES; lastUnfullscreenFrame = [self frame]; } -(void)windowDidEnterFullScreen:(NSNotification *)aNotification { + inFullscreenTransition = NO; initialPositionKnown = NO; [self checkSendEnterNotify]; } -(void)windowWillExitFullScreen:(NSNotification *)aNotification { + inFullscreenTransition = YES; } -(void)windowDidExitFullScreen:(NSNotification *)aNotification { + inFullscreenTransition = NO; initialPositionKnown = NO; [self checkSendEnterNotify]; } -(void)windowDidFailToEnterFullScreen:(NSNotification *)aNotification { + inFullscreenTransition = NO; } -(void)windowDidFailToExitFullScreen:(NSNotification *)aNotification { + inFullscreenTransition = NO; } -(void)windowDidChangeScreen:(NSNotification *)aNotification diff --git a/gdk/macos/GdkMacosWindow.h b/gdk/macos/GdkMacosWindow.h index 3a514ea857..1cf9ec805c 100644 --- a/gdk/macos/GdkMacosWindow.h +++ b/gdk/macos/GdkMacosWindow.h @@ -53,6 +53,7 @@ NSRect lastMaximizedFrame; NSRect lastUnfullscreenFrame; BOOL inMaximizeTransition; + BOOL inFullscreenTransition; } -(void)beginManualMove; @@ -70,5 +71,6 @@ -(void)setDecorated:(BOOL)decorated; -(void)swapBuffer:(GdkMacosBuffer *)buffer withDamage:(const cairo_region_t *)damage; -(BOOL)needsMouseDownQuirk; +-(BOOL)inFullscreenTransition; @end diff --git a/gdk/macos/gdkmacostoplevelsurface.c b/gdk/macos/gdkmacostoplevelsurface.c index 1759077563..aa828fcfa5 100644 --- a/gdk/macos/gdkmacostoplevelsurface.c +++ b/gdk/macos/gdkmacostoplevelsurface.c @@ -33,26 +33,26 @@ static void _gdk_macos_toplevel_surface_fullscreen (GdkMacosToplevelSurface *self) { - NSWindow *window; + GdkMacosWindow *window; g_assert (GDK_IS_MACOS_TOPLEVEL_SURFACE (self)); - window = _gdk_macos_surface_get_native (GDK_MACOS_SURFACE (self)); + window = (GdkMacosWindow *)_gdk_macos_surface_get_native (GDK_MACOS_SURFACE (self)); - if (([window styleMask] & NSWindowStyleMaskFullScreen) == 0) + if (![window inFullscreenTransition] && ([window styleMask] & NSWindowStyleMaskFullScreen) == 0) [window toggleFullScreen:window]; } static void _gdk_macos_toplevel_surface_unfullscreen (GdkMacosToplevelSurface *self) { - NSWindow *window; + GdkMacosWindow *window; g_assert (GDK_IS_MACOS_TOPLEVEL_SURFACE (self)); - window = _gdk_macos_surface_get_native (GDK_MACOS_SURFACE (self)); + window = (GdkMacosWindow *)_gdk_macos_surface_get_native (GDK_MACOS_SURFACE (self)); - if (([window styleMask] & NSWindowStyleMaskFullScreen) != 0) + if (![window inFullscreenTransition] && ([window styleMask] & NSWindowStyleMaskFullScreen) != 0) [window toggleFullScreen:window]; }