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 "ash/wm/panels/panel_layout_manager.h" | 5 #include "ash/wm/panels/panel_layout_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <map> | 8 #include <map> |
9 | 9 |
10 #include "ash/screen_util.h" | 10 #include "ash/screen_util.h" |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
363 PanelInfo panel_info; | 363 PanelInfo panel_info; |
364 panel_info.window = child; | 364 panel_info.window = child; |
365 panel_info.callout_widget = new PanelCalloutWidget(panel_container_); | 365 panel_info.callout_widget = new PanelCalloutWidget(panel_container_); |
366 if (child != dragged_panel_) { | 366 if (child != dragged_panel_) { |
367 // Set the panel to 0 opacity until it has been positioned to prevent it | 367 // Set the panel to 0 opacity until it has been positioned to prevent it |
368 // from flashing briefly at position (0, 0). | 368 // from flashing briefly at position (0, 0). |
369 child->layer()->SetOpacity(0); | 369 child->layer()->SetOpacity(0); |
370 panel_info.slide_in = true; | 370 panel_info.slide_in = true; |
371 } | 371 } |
372 panel_windows_.push_back(panel_info); | 372 panel_windows_.push_back(panel_info); |
373 child->AddObserver(this); | |
374 wm::GetWindowState(child)->AddObserver(this); | 373 wm::GetWindowState(child)->AddObserver(this); |
375 Relayout(); | 374 Relayout(); |
376 } | 375 } |
377 | 376 |
378 void PanelLayoutManager::OnWillRemoveWindowFromLayout(aura::Window* child) { | 377 void PanelLayoutManager::OnWillRemoveWindowFromLayout(aura::Window* child) { |
379 } | 378 } |
380 | 379 |
381 void PanelLayoutManager::OnWindowRemovedFromLayout(aura::Window* child) { | 380 void PanelLayoutManager::OnWindowRemovedFromLayout(aura::Window* child) { |
382 if (child->type() == ui::wm::WINDOW_TYPE_POPUP) | 381 if (child->type() == ui::wm::WINDOW_TYPE_POPUP) |
383 return; | 382 return; |
384 PanelList::iterator found = | 383 PanelList::iterator found = |
385 std::find(panel_windows_.begin(), panel_windows_.end(), child); | 384 std::find(panel_windows_.begin(), panel_windows_.end(), child); |
386 if (found != panel_windows_.end()) { | 385 if (found != panel_windows_.end()) { |
387 delete found->callout_widget; | 386 delete found->callout_widget; |
388 panel_windows_.erase(found); | 387 panel_windows_.erase(found); |
389 } | 388 } |
390 child->RemoveObserver(this); | |
391 wm::GetWindowState(child)->RemoveObserver(this); | 389 wm::GetWindowState(child)->RemoveObserver(this); |
392 | 390 |
393 if (dragged_panel_ == child) | 391 if (dragged_panel_ == child) |
394 dragged_panel_ = NULL; | 392 dragged_panel_ = NULL; |
395 | 393 |
396 if (last_active_panel_ == child) | 394 if (last_active_panel_ == child) |
397 last_active_panel_ = NULL; | 395 last_active_panel_ = NULL; |
398 | 396 |
399 Relayout(); | 397 Relayout(); |
400 } | 398 } |
401 | 399 |
402 void PanelLayoutManager::OnChildWindowVisibilityChanged(aura::Window* child, | 400 void PanelLayoutManager::OnChildWindowVisibilityChanged(aura::Window* child, |
403 bool visible) { | 401 bool visible) { |
| 402 if (visible) |
| 403 wm::GetWindowState(child)->Restore(); |
404 Relayout(); | 404 Relayout(); |
405 } | 405 } |
406 | 406 |
407 void PanelLayoutManager::SetChildBounds(aura::Window* child, | 407 void PanelLayoutManager::SetChildBounds(aura::Window* child, |
408 const gfx::Rect& requested_bounds) { | 408 const gfx::Rect& requested_bounds) { |
409 gfx::Rect bounds(requested_bounds); | 409 gfx::Rect bounds(requested_bounds); |
410 const gfx::Rect& max_bounds = panel_container_->GetRootWindow()->bounds(); | 410 const gfx::Rect& max_bounds = panel_container_->GetRootWindow()->bounds(); |
411 const int max_width = max_bounds.width() * kMaxWidthFactor; | 411 const int max_width = max_bounds.width() * kMaxWidthFactor; |
412 const int max_height = max_bounds.height() * kMaxHeightFactor; | 412 const int max_height = max_bounds.height() * kMaxHeightFactor; |
413 if (bounds.width() > max_width) | 413 if (bounds.width() > max_width) |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
473 } | 473 } |
474 return; | 474 return; |
475 } | 475 } |
476 | 476 |
477 if (window_state->IsMinimized()) | 477 if (window_state->IsMinimized()) |
478 MinimizePanel(window_state->window()); | 478 MinimizePanel(window_state->window()); |
479 else | 479 else |
480 RestorePanel(window_state->window()); | 480 RestorePanel(window_state->window()); |
481 } | 481 } |
482 | 482 |
483 void PanelLayoutManager::OnWindowVisibilityChanged( | |
484 aura::Window* window, bool visible) { | |
485 if (visible) | |
486 wm::GetWindowState(window)->Restore(); | |
487 } | |
488 | |
489 //////////////////////////////////////////////////////////////////////////////// | 483 //////////////////////////////////////////////////////////////////////////////// |
490 // PanelLayoutManager, aura::client::ActivationChangeObserver implementation: | 484 // PanelLayoutManager, aura::client::ActivationChangeObserver implementation: |
491 | 485 |
492 void PanelLayoutManager::OnWindowActivated(aura::Window* gained_active, | 486 void PanelLayoutManager::OnWindowActivated(aura::Window* gained_active, |
493 aura::Window* lost_active) { | 487 aura::Window* lost_active) { |
494 // Ignore if the panel that is not managed by this was activated. | 488 // Ignore if the panel that is not managed by this was activated. |
495 if (gained_active && gained_active->type() == ui::wm::WINDOW_TYPE_PANEL && | 489 if (gained_active && gained_active->type() == ui::wm::WINDOW_TYPE_PANEL && |
496 gained_active->parent() == panel_container_) { | 490 gained_active->parent() == panel_container_) { |
497 UpdateStacking(gained_active); | 491 UpdateStacking(gained_active); |
498 UpdateCallouts(); | 492 UpdateCallouts(); |
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
884 | 878 |
885 void PanelLayoutManager::OnKeyboardBoundsChanging( | 879 void PanelLayoutManager::OnKeyboardBoundsChanging( |
886 const gfx::Rect& keyboard_bounds) { | 880 const gfx::Rect& keyboard_bounds) { |
887 // This bounds change will have caused a change to the Shelf which does not | 881 // This bounds change will have caused a change to the Shelf which does not |
888 // propogate automatically to this class, so manually recalculate bounds. | 882 // propogate automatically to this class, so manually recalculate bounds. |
889 OnWindowResized(); | 883 OnWindowResized(); |
890 } | 884 } |
891 | 885 |
892 } // namespace internal | 886 } // namespace internal |
893 } // namespace ash | 887 } // namespace ash |
OLD | NEW |