Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore: cherry-pick 1aa9b09 from chromium (#33231)
* chore: cherry-pick 1aa9b09 from chromium * chore: update patches Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org> Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
- Loading branch information
1 parent
a6d7483
commit f983099
Showing
2 changed files
with
60 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
59 changes: 59 additions & 0 deletions
59
patches/chromium/set_dpi_correctly_during_main_window_creation.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Bruce Dawson <brucedawson@chromium.org> | ||
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 <robliao@chromium.org> | ||
Commit-Queue: Bruce Dawson <brucedawson@chromium.org> | ||
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 |