macos: add re-entrancy check when monitors change
authorChristian Hergert <christian@hergert.me>
Wed, 2 Mar 2022 08:32:50 +0000 (00:32 -0800)
committerChristian Hergert <chergert@redhat.com>
Wed, 16 Mar 2022 19:24:12 +0000 (12:24 -0700)
gdk/macos/gdkmacossurface-private.h
gdk/macos/gdkmacossurface.c

index 15a7442c17cc8428bb1fe2554c2595aa655fd1bd..5f1f551f93bf2c8ececdaf196c10607cade6dc5a 100644 (file)
@@ -75,6 +75,7 @@ struct _GdkMacosSurface
   guint geometry_dirty : 1;
   guint next_frame_set : 1;
   guint show_on_next_swap : 1;
+  guint in_change_monitor : 1;
   guint in_frame : 1;
   guint awaiting_frame : 1;
 };
index 42ff05385bff9cbdced7632883af4e190834c97b..14cb3de0150164cd6548aa9b9780e0201868a6ab 100644 (file)
@@ -1035,6 +1035,11 @@ _gdk_macos_surface_monitor_changed (GdkMacosSurface *self)
 
   g_return_if_fail (GDK_IS_MACOS_SURFACE (self));
 
+  if (self->in_change_monitor)
+    return;
+
+  self->in_change_monitor = TRUE;
+
   _gdk_macos_surface_cancel_frame (self);
 
   rect.x = self->root_x;
@@ -1103,6 +1108,8 @@ _gdk_macos_surface_monitor_changed (GdkMacosSurface *self)
 
   _gdk_macos_surface_configure (self);
   gdk_surface_invalidate_rect (GDK_SURFACE (self), NULL);
+
+  self->in_change_monitor = FALSE;
   _gdk_macos_surface_request_frame (self);
 }