Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Side by Side Diff: ash/wm/window_positioner.cc

Issue 107273002: Merge 236134 "Ensure that the first browser window which is crea..." (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1700/src/
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ash/wm/window_positioner.h ('k') | ash/wm/window_positioner_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "ash/wm/window_positioner.h" 5 #include "ash/wm/window_positioner.h"
6 6
7 #include "ash/ash_switches.h" 7 #include "ash/ash_switches.h"
8 #include "ash/screen_ash.h" 8 #include "ash/screen_ash.h"
9 #include "ash/shell.h" 9 #include "ash/shell.h"
10 #include "ash/shell_window_ids.h" 10 #include "ash/shell_window_ids.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 const int kForceMaximizeWidthLimitDisabled = 640; 43 const int kForceMaximizeWidthLimitDisabled = 640;
44 44
45 // The time in milliseconds which should be used to visually move a window 45 // The time in milliseconds which should be used to visually move a window
46 // through an automatic "intelligent" window management option. 46 // through an automatic "intelligent" window management option.
47 const int kWindowAutoMoveDurationMS = 125; 47 const int kWindowAutoMoveDurationMS = 125;
48 48
49 // If set to true all window repositioning actions will be ignored. Set through 49 // If set to true all window repositioning actions will be ignored. Set through
50 // WindowPositioner::SetIgnoreActivations(). 50 // WindowPositioner::SetIgnoreActivations().
51 static bool disable_auto_positioning = false; 51 static bool disable_auto_positioning = false;
52 52
53 // If set to true, by default the first window in ASH will be maxmized.
54 static bool maximize_first_window = false;
55
53 // Check if any management should be performed (with a given |window|). 56 // Check if any management should be performed (with a given |window|).
54 bool UseAutoWindowManager(const aura::Window* window) { 57 bool UseAutoWindowManager(const aura::Window* window) {
55 if (disable_auto_positioning) 58 if (disable_auto_positioning)
56 return false; 59 return false;
57 const wm::WindowState* window_state = wm::GetWindowState(window); 60 const wm::WindowState* window_state = wm::GetWindowState(window);
58 return window_state->tracked_by_workspace() && 61 return window_state->tracked_by_workspace() &&
59 window_state->window_position_managed(); 62 window_state->window_position_managed();
60 } 63 }
61 64
62 // Check if a given |window| can be managed. This includes that it's state is 65 // Check if a given |window| can be managed. This includes that it's state is
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 // If there is no valid other window we take and adjust the passed coordinates 233 // If there is no valid other window we take and adjust the passed coordinates
231 // and show state. 234 // and show state.
232 if (!top_window) { 235 if (!top_window) {
233 gfx::Rect work_area = screen->GetDisplayNearestWindow(target).work_area(); 236 gfx::Rect work_area = screen->GetDisplayNearestWindow(target).work_area();
234 237
235 bounds_in_out->AdjustToFit(work_area); 238 bounds_in_out->AdjustToFit(work_area);
236 // Use adjusted saved bounds, if there is one. 239 // Use adjusted saved bounds, if there is one.
237 if (is_saved_bounds) 240 if (is_saved_bounds)
238 return; 241 return;
239 // When using "small screens" we want to always open in full screen mode. 242 // When using "small screens" we want to always open in full screen mode.
240 if (show_state_in == ui::SHOW_STATE_DEFAULT && 243 if (show_state_in == ui::SHOW_STATE_DEFAULT && (maximize_first_window ||
241 work_area.width() <= GetForceMaximizedWidthLimit() && 244 (work_area.width() <= GetForceMaximizedWidthLimit() &&
242 (!new_window || !wm::GetWindowState(new_window)->IsFullscreen())) { 245 (!new_window || !wm::GetWindowState(new_window)->IsFullscreen())))) {
243 *show_state_out = ui::SHOW_STATE_MAXIMIZED; 246 *show_state_out = ui::SHOW_STATE_MAXIMIZED;
244 } 247 }
245 return; 248 return;
246 } 249 }
247 bool maximized = wm::GetWindowState(top_window)->IsMaximized(); 250 bool maximized = wm::GetWindowState(top_window)->IsMaximized();
248 // We ignore the saved show state, but look instead for the top level 251 // We ignore the saved show state, but look instead for the top level
249 // window's show state. 252 // window's show state.
250 if (show_state_in == ui::SHOW_STATE_DEFAULT) { 253 if (show_state_in == ui::SHOW_STATE_DEFAULT) {
251 *show_state_out = maximized ? ui::SHOW_STATE_MAXIMIZED : 254 *show_state_out = maximized ? ui::SHOW_STATE_MAXIMIZED :
252 ui::SHOW_STATE_DEFAULT; 255 ui::SHOW_STATE_DEFAULT;
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 work_area.width()) || 411 work_area.width()) ||
409 (old_pos.height() + popup_position_offset_from_screen_corner_y >= 412 (old_pos.height() + popup_position_offset_from_screen_corner_y >=
410 work_area.height())) 413 work_area.height()))
411 return AlignPopupPosition(old_pos, work_area, grid); 414 return AlignPopupPosition(old_pos, work_area, grid);
412 const gfx::Rect result = SmartPopupPosition(old_pos, work_area, grid); 415 const gfx::Rect result = SmartPopupPosition(old_pos, work_area, grid);
413 if (!result.IsEmpty()) 416 if (!result.IsEmpty())
414 return AlignPopupPosition(result, work_area, grid); 417 return AlignPopupPosition(result, work_area, grid);
415 return NormalPopupPosition(old_pos, work_area); 418 return NormalPopupPosition(old_pos, work_area);
416 } 419 }
417 420
421 // static
422 void WindowPositioner::SetMaximizeFirstWindow(bool maximize) {
423 maximize_first_window = maximize;
424 }
425
418 gfx::Rect WindowPositioner::NormalPopupPosition( 426 gfx::Rect WindowPositioner::NormalPopupPosition(
419 const gfx::Rect& old_pos, 427 const gfx::Rect& old_pos,
420 const gfx::Rect& work_area) { 428 const gfx::Rect& work_area) {
421 int w = old_pos.width(); 429 int w = old_pos.width();
422 int h = old_pos.height(); 430 int h = old_pos.height();
423 // Note: The 'last_popup_position' is checked and kept relative to the 431 // Note: The 'last_popup_position' is checked and kept relative to the
424 // screen size. The offsetting will be done in the last step when the 432 // screen size. The offsetting will be done in the last step when the
425 // target rectangle gets returned. 433 // target rectangle gets returned.
426 bool reset = false; 434 bool reset = false;
427 if (last_popup_position_y_ + h > work_area.height() || 435 if (last_popup_position_y_ + h > work_area.height() ||
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 // If the alignment was pushing the window out of the screen, we ignore the 539 // If the alignment was pushing the window out of the screen, we ignore the
532 // alignment for that call. 540 // alignment for that call.
533 if (abs(pos.right() - work_area.right()) < grid) 541 if (abs(pos.right() - work_area.right()) < grid)
534 x = work_area.right() - w; 542 x = work_area.right() - w;
535 if (abs(pos.bottom() - work_area.bottom()) < grid) 543 if (abs(pos.bottom() - work_area.bottom()) < grid)
536 y = work_area.bottom() - h; 544 y = work_area.bottom() - h;
537 return gfx::Rect(x, y, w, h); 545 return gfx::Rect(x, y, w, h);
538 } 546 }
539 547
540 } // namespace ash 548 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/window_positioner.h ('k') | ash/wm/window_positioner_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698