firefox/mozilla-1573813.patch

30 lines
1.1 KiB
Diff

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();
}