summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Hergert <christian@hergert.me>2022-03-02 00:43:33 -0800
committerChristian Hergert <chergert@redhat.com>2022-03-16 12:25:09 -0700
commitcb99370ce4b2af715c2b6debf3e54a4bf2d9a2fb (patch)
treee9b5ce23b54ed40afd1636b9c3d447b5ccf95e98
parentc2d1a21f9c38aa467346629fa11354661449dd77 (diff)
downloadgtk+-cb99370ce4b2af715c2b6debf3e54a4bf2d9a2fb.tar.gz
macos: handle transient-for from configure
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.
-rw-r--r--gdk/macos/gdkmacossurface.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/gdk/macos/gdkmacossurface.c b/gdk/macos/gdkmacossurface.c
index 8a1cf3747f..92d6cd1c34 100644
--- a/gdk/macos/gdkmacossurface.c
+++ b/gdk/macos/gdkmacossurface.c
@@ -811,8 +811,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;
@@ -821,6 +822,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];
@@ -830,10 +838,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
{