Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: cherry-pick 1aa9b09 from chromium #33231

Merged
merged 3 commits into from Mar 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions patches/chromium/.patches
Expand Up @@ -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
@@ -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