Blob Blame History Raw
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();
 }