macos: handle transient-for from configure
authorChristian Hergert <christian@hergert.me>
Wed, 2 Mar 2022 08:43:33 +0000 (00:43 -0800)
committerChristian Hergert <christian@hergert.me>
Wed, 2 Mar 2022 08:43:33 +0000 (00:43 -0800)
We failed to handle the toplevel with transient-for case here which could
cause our X/Y calculations to be off in other areas such as best monitor
detection.

gdk/macos/gdkmacossurface.c

index 1c971d9e955921c99957c5b24e0361bc8f4745da..c8df8533fd12d71f4a98ec199d5b6ccd7c5759d4 100644 (file)
@@ -837,8 +837,9 @@ _gdk_macos_surface_update_fullscreen_state (GdkMacosSurface *self)
 void
 _gdk_macos_surface_configure (GdkMacosSurface *self)
 {
-  GdkMacosDisplay *display;
   GdkSurface *surface = (GdkSurface *)self;
+  GdkMacosDisplay *display;
+  GdkMacosSurface *parent;
   NSRect frame_rect;
   NSRect content_rect;
 
@@ -847,6 +848,13 @@ _gdk_macos_surface_configure (GdkMacosSurface *self)
   if (GDK_SURFACE_DESTROYED (self))
     return;
 
+  if (surface->parent != NULL)
+    parent = GDK_MACOS_SURFACE (surface->parent);
+  else if (surface->transient_for != NULL)
+    parent = GDK_MACOS_SURFACE (surface->transient_for);
+  else
+    parent = NULL;
+
   display = GDK_MACOS_DISPLAY (GDK_SURFACE (self)->display);
   frame_rect = [self->window frame];
   content_rect = [self->window contentRectForFrameRect:frame_rect];
@@ -856,10 +864,10 @@ _gdk_macos_surface_configure (GdkMacosSurface *self)
                                           content_rect.origin.y + content_rect.size.height,
                                           &self->root_x, &self->root_y);
 
-  if (surface->parent != NULL)
+  if (parent != NULL)
     {
-      surface->x = self->root_x - GDK_MACOS_SURFACE (surface->parent)->root_x;
-      surface->y = self->root_y - GDK_MACOS_SURFACE (surface->parent)->root_y;
+      surface->x = self->root_x - parent->root_x;
+      surface->y = self->root_y - parent->root_y;
     }
   else
     {