| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/window_sizer/window_sizer.h" | 5 #include "chrome/browser/ui/window_sizer/window_sizer.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/prefs/pref_service.h" | 9 #include "base/prefs/pref_service.h" |
| 10 #include "chrome/browser/browser_process.h" | 10 #include "chrome/browser/browser_process.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 /////////////////////////////////////////////////////////////////////////////// | 35 /////////////////////////////////////////////////////////////////////////////// |
| 36 // An implementation of WindowSizer::StateProvider that gets the last active | 36 // An implementation of WindowSizer::StateProvider that gets the last active |
| 37 // and persistent state from the browser window and the user's profile. | 37 // and persistent state from the browser window and the user's profile. |
| 38 class DefaultStateProvider : public WindowSizer::StateProvider { | 38 class DefaultStateProvider : public WindowSizer::StateProvider { |
| 39 public: | 39 public: |
| 40 DefaultStateProvider(const std::string& app_name, const Browser* browser) | 40 DefaultStateProvider(const std::string& app_name, const Browser* browser) |
| 41 : app_name_(app_name), browser_(browser) { | 41 : app_name_(app_name), browser_(browser) { |
| 42 } | 42 } |
| 43 | 43 |
| 44 // Overridden from WindowSizer::StateProvider: | 44 // Overridden from WindowSizer::StateProvider: |
| 45 virtual bool GetPersistentState( | 45 bool GetPersistentState(gfx::Rect* bounds, |
| 46 gfx::Rect* bounds, | 46 gfx::Rect* work_area, |
| 47 gfx::Rect* work_area, | 47 ui::WindowShowState* show_state) const override { |
| 48 ui::WindowShowState* show_state) const override { | |
| 49 DCHECK(bounds); | 48 DCHECK(bounds); |
| 50 DCHECK(show_state); | 49 DCHECK(show_state); |
| 51 | 50 |
| 52 if (!browser_ || !browser_->profile()->GetPrefs()) | 51 if (!browser_ || !browser_->profile()->GetPrefs()) |
| 53 return false; | 52 return false; |
| 54 | 53 |
| 55 const base::DictionaryValue* wp_pref = | 54 const base::DictionaryValue* wp_pref = |
| 56 chrome::GetWindowPlacementDictionaryReadOnly( | 55 chrome::GetWindowPlacementDictionaryReadOnly( |
| 57 chrome::GetWindowName(browser_), browser_->profile()->GetPrefs()); | 56 chrome::GetWindowName(browser_), browser_->profile()->GetPrefs()); |
| 58 int top = 0, left = 0, bottom = 0, right = 0; | 57 int top = 0, left = 0, bottom = 0, right = 0; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 78 if (*show_state == ui::SHOW_STATE_DEFAULT && maximized) | 77 if (*show_state == ui::SHOW_STATE_DEFAULT && maximized) |
| 79 *show_state = ui::SHOW_STATE_MAXIMIZED; | 78 *show_state = ui::SHOW_STATE_MAXIMIZED; |
| 80 } | 79 } |
| 81 work_area->SetRect(work_area_left, work_area_top, | 80 work_area->SetRect(work_area_left, work_area_top, |
| 82 std::max(0, work_area_right - work_area_left), | 81 std::max(0, work_area_right - work_area_left), |
| 83 std::max(0, work_area_bottom - work_area_top)); | 82 std::max(0, work_area_bottom - work_area_top)); |
| 84 | 83 |
| 85 return has_prefs; | 84 return has_prefs; |
| 86 } | 85 } |
| 87 | 86 |
| 88 virtual bool GetLastActiveWindowState( | 87 bool GetLastActiveWindowState( |
| 89 gfx::Rect* bounds, | 88 gfx::Rect* bounds, |
| 90 ui::WindowShowState* show_state) const override { | 89 ui::WindowShowState* show_state) const override { |
| 91 DCHECK(show_state); | 90 DCHECK(show_state); |
| 92 // Applications are always restored with the same position. | 91 // Applications are always restored with the same position. |
| 93 if (!app_name_.empty()) | 92 if (!app_name_.empty()) |
| 94 return false; | 93 return false; |
| 95 | 94 |
| 96 // If a reference browser is set, use its window. Otherwise find last | 95 // If a reference browser is set, use its window. Otherwise find last |
| 97 // active. Panels are never used as reference browsers as panels are | 96 // active. Panels are never used as reference browsers as panels are |
| 98 // specially positioned. | 97 // specially positioned. |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 std::string app_name_; | 133 std::string app_name_; |
| 135 | 134 |
| 136 // If set, is used as the reference browser for GetLastActiveWindowState. | 135 // If set, is used as the reference browser for GetLastActiveWindowState. |
| 137 const Browser* browser_; | 136 const Browser* browser_; |
| 138 DISALLOW_COPY_AND_ASSIGN(DefaultStateProvider); | 137 DISALLOW_COPY_AND_ASSIGN(DefaultStateProvider); |
| 139 }; | 138 }; |
| 140 | 139 |
| 141 class DefaultTargetDisplayProvider : public WindowSizer::TargetDisplayProvider { | 140 class DefaultTargetDisplayProvider : public WindowSizer::TargetDisplayProvider { |
| 142 public: | 141 public: |
| 143 DefaultTargetDisplayProvider() {} | 142 DefaultTargetDisplayProvider() {} |
| 144 virtual ~DefaultTargetDisplayProvider() {} | 143 ~DefaultTargetDisplayProvider() override {} |
| 145 | 144 |
| 146 virtual gfx::Display GetTargetDisplay( | 145 gfx::Display GetTargetDisplay(const gfx::Screen* screen, |
| 147 const gfx::Screen* screen, | 146 const gfx::Rect& bounds) const override { |
| 148 const gfx::Rect& bounds) const override { | |
| 149 #if defined(USE_ASH) | 147 #if defined(USE_ASH) |
| 150 bool force_ash = false; | 148 bool force_ash = false; |
| 151 // On Windows check if the browser is launched to serve ASH. If yes then | 149 // On Windows check if the browser is launched to serve ASH. If yes then |
| 152 // we should get the display for the corresponding root window created for | 150 // we should get the display for the corresponding root window created for |
| 153 // ASH. This ensures that the display gets the correct workarea, etc. | 151 // ASH. This ensures that the display gets the correct workarea, etc. |
| 154 // If the ASH shell does not exist then the current behavior is to open | 152 // If the ASH shell does not exist then the current behavior is to open |
| 155 // browser windows if any on the desktop. Preserve that for now. | 153 // browser windows if any on the desktop. Preserve that for now. |
| 156 // TODO(ananta). | 154 // TODO(ananta). |
| 157 // This effectively means that the running browser process is in a split | 155 // This effectively means that the running browser process is in a split |
| 158 // personality mode, part of it running in ASH and the other running in | 156 // personality mode, part of it running in ASH and the other running in |
| (...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 | 434 |
| 437 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kStartMaximized)) | 435 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kStartMaximized)) |
| 438 return ui::SHOW_STATE_MAXIMIZED; | 436 return ui::SHOW_STATE_MAXIMIZED; |
| 439 | 437 |
| 440 if (browser_->initial_show_state() != ui::SHOW_STATE_DEFAULT) | 438 if (browser_->initial_show_state() != ui::SHOW_STATE_DEFAULT) |
| 441 return browser_->initial_show_state(); | 439 return browser_->initial_show_state(); |
| 442 | 440 |
| 443 // Otherwise we use the default which can be overridden later on. | 441 // Otherwise we use the default which can be overridden later on. |
| 444 return ui::SHOW_STATE_DEFAULT; | 442 return ui::SHOW_STATE_DEFAULT; |
| 445 } | 443 } |
| OLD | NEW |