Take Snapped status into account when showing a window as normal
Adjusts HWNDMessageHandler::Show to correctly restore windows that were in a snapped state prior to being hidden or maximized. From Windows documentation at https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-iswindowarranged: > A snapped window (see Snap your windows) is considered to be arranged. > You should treat arranged as a window state similar to maximized. Arranged, > maximized, and minimized are mutually exclusive states. The logic already took into account a window being maximized and correctly restored it, but if the window was snapped prior to this CL it would be removed from its snapped state when re-shown. This fixes that. Bug: 402791065 Change-Id: Ia300a16a5e2f5b4168094a6231b9a503f2ff868a Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6330848 Commit-Queue: David Sanders <dsanders11@ucsbalum.com> Reviewed-by: Robert Liao <robliao@chromium.org> Reviewed-by: David Sanders <dsanders11@ucsbalum.com> Cr-Commit-Position: refs/heads/main@{#1432949}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
ccfe003a4f
commit
83f7707e85
@ -683,7 +683,8 @@ void HWNDMessageHandler::Show(ui::mojom::WindowShowState show_state,
|
||||
SetWindowPlacement(hwnd(), &placement);
|
||||
native_show_state = SW_SHOWMAXIMIZED;
|
||||
} else {
|
||||
const bool is_maximized = IsMaximized();
|
||||
const bool is_maximized_or_arranged =
|
||||
IsMaximized() || IsWindowArranged(hwnd());
|
||||
|
||||
// Use SW_SHOW/SW_SHOWNA instead of SW_SHOWNORMAL/SW_SHOWNOACTIVATE so that
|
||||
// the window is not restored to its original position if it is maximized.
|
||||
@ -693,7 +694,8 @@ void HWNDMessageHandler::Show(ui::mojom::WindowShowState show_state,
|
||||
// position, some do not. See crbug.com/1296710
|
||||
switch (show_state) {
|
||||
case ui::mojom::WindowShowState::kInactive:
|
||||
native_show_state = is_maximized ? SW_SHOWNA : SW_SHOWNOACTIVATE;
|
||||
native_show_state =
|
||||
is_maximized_or_arranged ? SW_SHOWNA : SW_SHOWNOACTIVATE;
|
||||
break;
|
||||
case ui::mojom::WindowShowState::kMaximized:
|
||||
native_show_state = SW_SHOWMAXIMIZED;
|
||||
@ -704,9 +706,11 @@ void HWNDMessageHandler::Show(ui::mojom::WindowShowState show_state,
|
||||
case ui::mojom::WindowShowState::kNormal:
|
||||
if ((GetWindowLong(hwnd(), GWL_EXSTYLE) & WS_EX_TRANSPARENT) ||
|
||||
(GetWindowLong(hwnd(), GWL_EXSTYLE) & WS_EX_NOACTIVATE)) {
|
||||
native_show_state = is_maximized ? SW_SHOWNA : SW_SHOWNOACTIVATE;
|
||||
native_show_state =
|
||||
is_maximized_or_arranged ? SW_SHOWNA : SW_SHOWNOACTIVATE;
|
||||
} else {
|
||||
native_show_state = is_maximized ? SW_SHOW : SW_SHOWNORMAL;
|
||||
native_show_state =
|
||||
is_maximized_or_arranged ? SW_SHOW : SW_SHOWNORMAL;
|
||||
}
|
||||
break;
|
||||
case ui::mojom::WindowShowState::kFullscreen:
|
||||
|
Reference in New Issue
Block a user