30 lines
1.1 KiB
Diff
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();
|
||
|
}
|
||
|
|
||
|
|