Browse Source

chore: cherry-pick 1aa9b09 from chromium (#33231)

* chore: cherry-pick 1aa9b09 from chromium

* chore: update patches

Co-authored-by: John Kleinschmidt <[email protected]>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Michaela Laurencin 3 years ago
parent
commit
f9830999c1

+ 1 - 0
patches/chromium/.patches

@@ -117,3 +117,4 @@ fix_don_t_restore_maximized_windows_when_calling_showinactive.patch
 build_disable_partition_alloc_on_mac.patch
 fix_non-client_mouse_tracking_and_message_bubbling_on_windows.patch
 remove_incorrect_width_height_adjustments.patch
+set_dpi_correctly_during_main_window_creation.patch

+ 59 - 0
patches/chromium/set_dpi_correctly_during_main_window_creation.patch

@@ -0,0 +1,59 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Bruce Dawson <[email protected]>
+Date: Tue, 11 Jan 2022 21:22:18 +0000
+Subject: Set dpi_ correctly during main window creation
+
+For some Chrome windows the dpi_ setting cannot be set during window
+creation because the window location is not yet known. For other windows
+the dpi_ setting _must_ be set during window creation. This change
+handles both cases by setting dpi_ if the window size/location is being
+specified. This then handles both the task manager and main window
+cases.
+
+Bug: 1282804
+Change-Id: Ic85dfb1646e9d063af324cc79736b660cea1acdc
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3378579
+Reviewed-by: Robert Liao <[email protected]>
+Commit-Queue: Bruce Dawson <[email protected]>
+Cr-Commit-Position: refs/heads/main@{#957715}
+
+diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
+index 783fde724396ee0dce8bbb25834e00c0da0d924b..896ba821b1bbbf44f1464b3efb4f251d42980c8a 100644
+--- a/ui/views/win/hwnd_message_handler.cc
++++ b/ui/views/win/hwnd_message_handler.cc
+@@ -444,6 +444,7 @@ void HWNDMessageHandler::Init(HWND parent, const gfx::Rect& bounds) {
+   GetMonitorAndRects(bounds.ToRECT(), &last_monitor_, &last_monitor_rect_,
+                      &last_work_area_);
+ 
++  initial_bounds_valid_ = !bounds.IsEmpty();
+   // Create the window.
+   WindowImpl::Init(parent, bounds);
+ 
+@@ -1665,6 +1666,12 @@ LRESULT HWNDMessageHandler::OnCreate(CREATESTRUCT* create_struct) {
+       std::make_unique<ui::SessionChangeObserver>(base::BindRepeating(
+           &HWNDMessageHandler::OnSessionChange, base::Unretained(this)));
+ 
++  // If the window was initialized with a specific size/location then we know
++  // the DPI and thus must initialize dpi_ now. See https://crbug.com/1282804
++  // for details.
++  if (initial_bounds_valid_)
++    dpi_ = display::win::ScreenWin::GetDPIForHWND(hwnd());
++
+   // TODO(beng): move more of NWW::OnCreate here.
+   return 0;
+ }
+diff --git a/ui/views/win/hwnd_message_handler.h b/ui/views/win/hwnd_message_handler.h
+index f6691252bd593e83fdda4fac73498df9d1cf3af6..9d45f97b930831a703efab2bbdf10afb61140c7f 100644
+--- a/ui/views/win/hwnd_message_handler.h
++++ b/ui/views/win/hwnd_message_handler.h
+@@ -645,6 +645,10 @@ class VIEWS_EXPORT HWNDMessageHandler : public gfx::WindowImpl,
+   // The current DPI.
+   int dpi_;
+ 
++  // This is true if the window is created with a specific size/location, as
++  // opposed to having them set after window creation.
++  bool initial_bounds_valid_ = false;
++
+   // Whether EnableNonClientDpiScaling was called successfully with this window.
+   // This flag exists because EnableNonClientDpiScaling must be called during
+   // WM_NCCREATE and EnableChildWindowDpiMessage is called after window