diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp --- a/widget/gtk/nsWindow.cpp +++ b/widget/gtk/nsWindow.cpp @@ -6577,11 +6577,22 @@ } gint nsWindow::GdkScaleFactor() { + // For popup windows with parent window we need to get scale factor of the + // parent window. Otherwise the scale factor of the popup is not updated + // during it's hidden. + GdkWindow* scaledGdkWindow = mGdkWindow; + if (mToplevelParentWindow) { + scaledGdkWindow = gtk_widget_get_window(GTK_WIDGET(mToplevelParentWindow)); + // Fallback for windows which parent has been unrealized. + if (!scaledGdkWindow) { + scaledGdkWindow = mGdkWindow; + } + } // Available as of GTK 3.10+ static auto sGdkWindowGetScaleFactorPtr = (gint(*)(GdkWindow*))dlsym(RTLD_DEFAULT, "gdk_window_get_scale_factor"); - if (sGdkWindowGetScaleFactorPtr && mGdkWindow) - return (*sGdkWindowGetScaleFactorPtr)(mGdkWindow); + if (sGdkWindowGetScaleFactorPtr && scaledGdkWindow) + return (*sGdkWindowGetScaleFactorPtr)(scaledGdkWindow); return ScreenHelperGTK::GetGTKMonitorScaleFactor(); }