diff --git a/shell/browser/native_window_views_win.cc b/shell/browser/native_window_views_win.cc index 3575cbd2b303a..21f5f470feca8 100644 --- a/shell/browser/native_window_views_win.cc +++ b/shell/browser/native_window_views_win.cc @@ -345,35 +345,24 @@ bool NativeWindowViews::PreHandleMSG(UINT message, return false; } case WM_GETMINMAXINFO: { - // We need to handle GETMINMAXINFO ourselves because chromium tries to - // get the scale factor of the window during it's version of this handler - // based on the window position, which is invalid at this point. The - // previous method of calling SetWindowPlacement fixed the window - // position for the scale factor calculation but broke other things. - MINMAXINFO* info = reinterpret_cast(l_param); - - display::Display display = - display::Screen::GetScreen()->GetDisplayNearestPoint( - last_normal_placement_bounds_.origin()); - - gfx::Size min_size = gfx::ScaleToCeiledSize( - widget()->GetMinimumSize(), display.device_scale_factor()); - gfx::Size max_size = gfx::ScaleToCeiledSize( - widget()->GetMaximumSize(), display.device_scale_factor()); - - info->ptMinTrackSize.x = min_size.width(); - info->ptMinTrackSize.y = min_size.height(); - if (max_size.width() || max_size.height()) { - if (!max_size.width()) - max_size.set_width(GetSystemMetrics(SM_CXMAXTRACK)); - if (!max_size.height()) - max_size.set_height(GetSystemMetrics(SM_CYMAXTRACK)); - info->ptMaxTrackSize.x = max_size.width(); - info->ptMaxTrackSize.y = max_size.height(); + WINDOWPLACEMENT wp; + wp.length = sizeof(WINDOWPLACEMENT); + + // We do this to work around a Windows bug, where the minimized Window + // would report that the closest display to it is not the one that it was + // previously on (but the leftmost one instead). We restore the position + // of the window during the restore operation, this way chromium can + // use the proper display to calculate the scale factor to use. + if (!last_normal_placement_bounds_.IsEmpty() && + GetWindowPlacement(GetAcceleratedWidget(), &wp)) { + last_normal_placement_bounds_.set_size(gfx::Size(0, 0)); + wp.rcNormalPosition = last_normal_placement_bounds_.ToRECT(); + SetWindowPlacement(GetAcceleratedWidget(), &wp); + + last_normal_placement_bounds_ = gfx::Rect(); } - *result = 1; - return true; + return false; } case WM_NCCALCSIZE: { if (!has_frame() && w_param == TRUE) {