window_sizer_ash.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/window_sizer/window_sizer.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ash/shell.h" 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/wm/window_positioner.h" 968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ash/wm/window_state.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/window.h" 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/aura/window_event_dispatcher.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/screen.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void WindowSizer::GetTabbedBrowserBoundsAsh( 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) gfx::Rect* bounds_in_screen, 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ui::WindowShowState* show_state) const { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(show_state); 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(bounds_in_screen); 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(browser_->is_type_tabbed()); 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(bounds_in_screen->IsEmpty()); 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::WindowShowState passed_show_state = *show_state; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool is_saved_bounds = GetSavedWindowBounds(bounds_in_screen, show_state); 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) gfx::Display display; 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (is_saved_bounds) { 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) display = screen_->GetDisplayMatching(*bounds_in_screen); 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } else { 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // If there is no saved bounds (hence bounds_in_screen is empty), use the 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // target display. 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) display = target_display_provider_->GetTargetDisplay(screen_, 34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) *bounds_in_screen); 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *bounds_in_screen = ash::WindowPositioner::GetDefaultWindowBounds(display); 36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (browser_->is_session_restore()) { 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // This is a fall-through case when there is no bounds recorded 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // for restored window, and should not be used except for the case 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // above. The regular path is handled in 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // |WindowSizer::DetermineWindowBoundsAndShowState|. 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Note: How restore bounds/show state data are passed. 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The restore bounds is passed via |Browser::override_bounds()| in 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // |chrome::GetBrowserWindowBoundsAndShowState()|. 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The restore state is passed via |Browser::initial_state()| in 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // |WindowSizer::GetWindowDefaultShowState|. 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bounds_in_screen->AdjustToFit(display.work_area()); 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The |browser_window| is non NULL when this is called after 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // browser's aura window is created. 554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) aura::Window* browser_window = 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) browser_->window() ? browser_->window()->GetNativeWindow() : NULL; 574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::GetBoundsAndShowStateForNewWindow( 594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) screen_, 604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) browser_window, 614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) is_saved_bounds, 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) passed_show_state, 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bounds_in_screen, 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) show_state); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 66