diff -Naur a/gdk/quartz/GdkQuartzView.c b/gdk/quartz/GdkQuartzView.c --- gdk/quartz/GdkQuartzView.c 2021-01-11 20:51:03.000000000 +0000 +++ gdk/quartz/GdkQuartzView.c 2021-01-11 20:42:40.000000000 +0000 @@ -599,6 +599,22 @@ gdk_screen_get_rgba_colormap (_gdk_screen); } +- (void) viewWillDraw +{ + /* MacOS 11 (Big Sur) has added a new, dynamic "accent" as default. + * This uses a 10-bit colorspace so every GIMP drawing operation + * has the additional cost of an 8-bit (ARGB) to 10-bit conversion. + * Let's disable this mode to regain the lost performance. + */ + if(gdk_quartz_osx_version() >= GDK_OSX_BIG_SUR) + { + CALayer* layer = self.layer; + layer.contentsFormat = kCAContentsFormatRGBA8Uint; + } + + [super viewWillDraw]; +} + -(void)drawRect: (NSRect)rect { GdkRectangle gdk_rect; diff -Naur a/gdk/quartz/gdkdrawable-quartz.c b/gdk/quartz/gdkdrawable-quartz.c --- gdk/quartz/gdkdrawable-quartz.c 2021-01-11 20:51:03.000000000 +0000 +++ gdk/quartz/gdkdrawable-quartz.c 2021-01-11 20:42:40.000000000 +0000 @@ -898,7 +898,15 @@ if (window_impl->in_paint_rect_count == 0) { _gdk_quartz_drawable_flush (drawable); - [window_impl->view unlockFocus]; + + /* As per gdk_window_impl_quartz_get_context(), the NSView + * focus-locking API set was deprecated in MacOS 10.14 and has + * a significant cost in MacOS 11 - every lock/unlock seems to + * trigger a drawRect: call for the entire window. To return the + * lost performance, do not use the locking API in MacOS 11+ + */ + if(gdk_quartz_osx_version() < GDK_OSX_MOJAVE) + [window_impl->view unlockFocus]; } } else if (GDK_IS_PIXMAP_IMPL_QUARTZ (drawable)) diff -Naur a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c --- gdk/quartz/gdkwindow-quartz.c 2021-01-11 20:51:03.000000000 +0000 +++ gdk/quartz/gdkwindow-quartz.c 2021-01-11 20:42:40.000000000 +0000 @@ -106,8 +106,16 @@ */ if (window_impl->in_paint_rect_count == 0) { - if (![window_impl->view lockFocusIfCanDraw]) - return NULL; + /* The NSView focus-locking API set was deprecated in MacOS 10.14 and + * has a significant cost in MacOS 11 - every lock/unlock seems to + * trigger a drawRect: call for the entire window. To return the + * lost performance, do not use the locking API in MacOS 11+ + */ + if(gdk_quartz_osx_version() < GDK_OSX_MOJAVE) + { + if (![window_impl->view lockFocusIfCanDraw]) + return NULL; + } } if (gdk_quartz_osx_version () < GDK_OSX_YOSEMITE) cg_context = [[NSGraphicsContext currentContext] graphicsPort];