Chromium Code Reviews| Index: ash/wm/maximize_mode/maximize_mode_window_state.cc |
| diff --git a/ash/wm/maximize_mode/maximize_mode_window_state.cc b/ash/wm/maximize_mode/maximize_mode_window_state.cc |
| index e823455d48e15688f8759c3194c0497bf2cd57b9..77a58fde1a9687a1b899ca91154ced426e15294f 100644 |
| --- a/ash/wm/maximize_mode/maximize_mode_window_state.cc |
| +++ b/ash/wm/maximize_mode/maximize_mode_window_state.cc |
| @@ -45,6 +45,25 @@ gfx::Size GetMaximumSizeOfWindow(wm::WindowState* window_state) { |
| return size; |
| } |
| +// Returns the centered bounds of the given bounds in the work area. |
| +gfx::Rect GetCenteredBounds(const gfx::Rect& bounds_in_parent, |
| + wm::WindowState* state_object) { |
| + gfx::Rect bounds = bounds_in_parent; |
| + gfx::Rect work_area_in_parent = |
| + ScreenUtil::GetDisplayWorkAreaBoundsInParent(state_object->window()); |
| + wm::AdjustBoundsToEnsureMinimumWindowVisibility(work_area_in_parent, &bounds); |
| + |
| + // Center the window over the work area. |
| + int x = (work_area_in_parent.width() - bounds.width()) / 2 + |
| + work_area_in_parent.x(); |
| + int y = (work_area_in_parent.height() - bounds.height()) / 2 + |
| + work_area_in_parent.y(); |
|
oshima
2014/04/24 21:01:25
I think
work_area_in_parent.ClampToCenteredSize(b
Mr4D (OOO till 08-26)
2014/04/24 21:42:20
I tried this yesterday. And it did not work. Appar
|
| + |
| + bounds.set_origin(gfx::Point(x, y)); |
| + |
| + return bounds; |
| +} |
| + |
| // Returns the maximized and centered bounds of a window. |
| gfx::Rect GetMaximizedAndCenteredBounds(wm::WindowState* state_object) { |
| gfx::Rect bounds_in_parent; |
| @@ -60,21 +79,7 @@ gfx::Rect GetMaximizedAndCenteredBounds(wm::WindowState* state_object) { |
| else |
| bounds_in_parent = state_object->window()->bounds(); |
| } |
| - gfx::Rect work_area_in_parent = |
| - ScreenUtil::GetDisplayWorkAreaBoundsInParent(state_object->window()); |
| - |
| - wm::AdjustBoundsToEnsureMinimumWindowVisibility(work_area_in_parent, |
| - &bounds_in_parent); |
| - |
| - // Center the window over the work area. |
| - int x = (work_area_in_parent.width() - bounds_in_parent.width()) / 2 + |
| - work_area_in_parent.x(); |
| - int y = (work_area_in_parent.height() - bounds_in_parent.height()) / 2 + |
| - work_area_in_parent.y(); |
| - |
| - bounds_in_parent.set_origin(gfx::Point(x, y)); |
| - |
| - return bounds_in_parent; |
| + return GetCenteredBounds(bounds_in_parent, state_object); |
| } |
| } // namespace |
| @@ -148,11 +153,13 @@ void MaximizeModeWindowState::OnWMEvent(wm::WindowState* window_state, |
| // requested bounds and center it to a fully visible area on the screen. |
| gfx::Rect bounds_in_parent = |
| (static_cast<const wm::SetBoundsEvent*>(event))->requested_bounds(); |
| - bounds_in_parent.ClampToCenteredSize( |
| - ScreenUtil::GetDisplayWorkAreaBoundsInParent( |
| - window_state->window()).size()); |
| - if (bounds_in_parent != window_state->window()->bounds()) |
| - window_state->SetBoundsDirectAnimated(bounds_in_parent); |
| + bounds_in_parent = GetCenteredBounds(bounds_in_parent, window_state); |
| + if (bounds_in_parent != window_state->window()->bounds()) { |
| + if (window_state->window()->IsVisible()) |
|
oshima
2014/04/24 21:01:25
how this can be not visible (in non minimized mode
Mr4D (OOO till 08-26)
2014/04/24 21:42:20
Multi user mode for example. Before the window get
oshima
2014/04/24 21:57:52
I see. I don't think we do this in normal mode, bu
|
| + window_state->SetBoundsDirectAnimated(bounds_in_parent); |
| + else |
| + window_state->SetBoundsDirect(bounds_in_parent); |
| + } |
| } |
| break; |
| case wm::WM_EVENT_ADDED_TO_WORKSPACE: |