Skip to content

Commit

Permalink
chore: cherry-pick 1aa9b09 from chromium (#33231)
Browse files Browse the repository at this point in the history
* 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
3 people authored and electron-bot committed Mar 22, 2022
1 parent 6788561 commit aac3914
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 0 deletions.
1 change: 1 addition & 0 deletions patches/chromium/.patches
Expand Up @@ -163,3 +163,4 @@ cherry-pick-905302eb3a2b.patch
cherry-pick-246c10dede97.patch
fix_imagebitmaprenderingcontext_interaction_with_software_compositor.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

0 comments on commit aac3914

Please sign in to comment.