diff --git gdk/quartz/gdkwindow-quartz.c gdk/quartz/gdkwindow-quartz.c index 5d6d522846..df2a8d051e 100644 --- gdk/quartz/gdkwindow-quartz.c +++ gdk/quartz/gdkwindow-quartz.c @@ -1185,8 +1185,41 @@ gdk_window_quartz_show (GdkWindow *window, gboolean already_mapped) clear_toplevel_order (); _gdk_quartz_events_send_map_event (window); + + /* Fix for menu height scaling on standard DPI monitors in mixed DPI environments */ + if (window->window_type == GDK_WINDOW_TEMP && impl->toplevel) + { + GdkDisplay *display = gdk_window_get_display(window); + GdkMonitor *monitor = gdk_display_get_monitor_at_window(display, window); + gint scale_factor = gdk_monitor_get_scale_factor(monitor); + + /* Only fix on low-DPI monitors */ + if (scale_factor == 1) + { + if (!g_object_get_data (G_OBJECT (window), "quartz-menu-height-fixed")) + { + NSWindow *nswindow = impl->toplevel; + NSRect frame = [nswindow frame]; + NSView *contentView = [nswindow contentView]; + + /* Apply a modest adjustment to compensate for the 1/4 height issue */ + /* Using a tiny multiplier is enough since macOS corrects itself after first display */ + frame.size.height *= 1.01; + + /* Resize the window with animation disabled */ + [nswindow setFrame:frame display:YES animate:NO]; + + /* Force layout update */ + [contentView setNeedsDisplay:YES]; + + /* Mark as fixed */ + g_object_set_data (G_OBJECT (window), "quartz-menu-height-fixed", + GINT_TO_POINTER (TRUE)); + } + } + } } - else + else { [impl->view setHidden:NO]; }