Bug 1573813 - use parent window scale factor for the popup/tooltips; r=stransky
☠☠ backed out by 64ae9ab76db0 ☠ ☠
authorJan Horak <jhorak@redhat.com>
Tue, 20 Aug 2019 15:52:12 +0000
changeset 489037 4f82f0b92629af3ebb20dadd661c2149f3c48f8b
parent 489036 0dc91d87721bbd95ec2bccd1bfff87f22125ae6d
child 489038 14e4fa4d01814badcd0c9818e495a396d27597b3
push id93086
push userncsoregi@mozilla.com
push dateTue, 20 Aug 2019 17:47:09 +0000
treeherderautoland@4f82f0b92629 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersstransky
bugs1573813
milestone70.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1573813 - use parent window scale factor for the popup/tooltips; r=stransky For popup windows with parent we need to get scale factor of the parent window. Because when the windows are hidden they're not receiving updates about changing scaling factor. So when moving from normal dpi to the hidpi monitor the newly opened popup windows will have the same scale Differential Revision: https://phabricator.services.mozilla.com/D41947
widget/gtk/nsWindow.cpp
--- a/widget/gtk/nsWindow.cpp
+++ b/widget/gtk/nsWindow.cpp
@@ -6571,21 +6571,28 @@ void nsWindow::SetDrawsInTitlebar(bool a
       UpdateTitlebarTransparencyBitmap();
     } else {
       ClearTransparencyBitmap();
     }
   }
 }
 
 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));
+  }
   // 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();
 }
 
 gint nsWindow::DevicePixelsToGdkCoordRoundUp(int pixels) {
   gint scale = GdkScaleFactor();
   return (pixels + scale - 1) / scale;
 }