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

Side by Side Diff: ash/wm/panels/panel_layout_manager.cc

Issue 215253003: Fix infinite recursion on hiding panel when created during fullscreen mode. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 months 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/panels/panel_layout_manager.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 PanelInfo panel_info; 364 PanelInfo panel_info;
365 panel_info.window = child; 365 panel_info.window = child;
366 panel_info.callout_widget = new PanelCalloutWidget(panel_container_); 366 panel_info.callout_widget = new PanelCalloutWidget(panel_container_);
367 if (child != dragged_panel_) { 367 if (child != dragged_panel_) {
368 // Set the panel to 0 opacity until it has been positioned to prevent it 368 // Set the panel to 0 opacity until it has been positioned to prevent it
369 // from flashing briefly at position (0, 0). 369 // from flashing briefly at position (0, 0).
370 child->layer()->SetOpacity(0); 370 child->layer()->SetOpacity(0);
371 panel_info.slide_in = true; 371 panel_info.slide_in = true;
372 } 372 }
373 panel_windows_.push_back(panel_info); 373 panel_windows_.push_back(panel_info);
374 child->AddObserver(this);
375 wm::GetWindowState(child)->AddObserver(this); 374 wm::GetWindowState(child)->AddObserver(this);
376 Relayout(); 375 Relayout();
377 } 376 }
378 377
379 void PanelLayoutManager::OnWillRemoveWindowFromLayout(aura::Window* child) { 378 void PanelLayoutManager::OnWillRemoveWindowFromLayout(aura::Window* child) {
380 } 379 }
381 380
382 void PanelLayoutManager::OnWindowRemovedFromLayout(aura::Window* child) { 381 void PanelLayoutManager::OnWindowRemovedFromLayout(aura::Window* child) {
383 if (child->type() == ui::wm::WINDOW_TYPE_POPUP) 382 if (child->type() == ui::wm::WINDOW_TYPE_POPUP)
384 return; 383 return;
385 PanelList::iterator found = 384 PanelList::iterator found =
386 std::find(panel_windows_.begin(), panel_windows_.end(), child); 385 std::find(panel_windows_.begin(), panel_windows_.end(), child);
387 if (found != panel_windows_.end()) { 386 if (found != panel_windows_.end()) {
388 delete found->callout_widget; 387 delete found->callout_widget;
389 panel_windows_.erase(found); 388 panel_windows_.erase(found);
390 } 389 }
391 child->RemoveObserver(this);
392 wm::GetWindowState(child)->RemoveObserver(this); 390 wm::GetWindowState(child)->RemoveObserver(this);
393 391
394 if (dragged_panel_ == child) 392 if (dragged_panel_ == child)
395 dragged_panel_ = NULL; 393 dragged_panel_ = NULL;
396 394
397 if (last_active_panel_ == child) 395 if (last_active_panel_ == child)
398 last_active_panel_ = NULL; 396 last_active_panel_ = NULL;
399 397
400 Relayout(); 398 Relayout();
401 } 399 }
402 400
403 void PanelLayoutManager::OnChildWindowVisibilityChanged(aura::Window* child, 401 void PanelLayoutManager::OnChildWindowVisibilityChanged(aura::Window* child,
404 bool visible) { 402 bool visible) {
403 if (visible)
404 wm::GetWindowState(child)->Restore();
405 Relayout(); 405 Relayout();
406 } 406 }
407 407
408 void PanelLayoutManager::SetChildBounds(aura::Window* child, 408 void PanelLayoutManager::SetChildBounds(aura::Window* child,
409 const gfx::Rect& requested_bounds) { 409 const gfx::Rect& requested_bounds) {
410 gfx::Rect bounds(requested_bounds); 410 gfx::Rect bounds(requested_bounds);
411 const gfx::Rect& max_bounds = panel_container_->GetRootWindow()->bounds(); 411 const gfx::Rect& max_bounds = panel_container_->GetRootWindow()->bounds();
412 const int max_width = max_bounds.width() * kMaxWidthFactor; 412 const int max_width = max_bounds.width() * kMaxWidthFactor;
413 const int max_height = max_bounds.height() * kMaxHeightFactor; 413 const int max_height = max_bounds.height() * kMaxHeightFactor;
414 if (bounds.width() > max_width) 414 if (bounds.width() > max_width)
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 } 474 }
475 return; 475 return;
476 } 476 }
477 477
478 if (window_state->IsMinimized()) 478 if (window_state->IsMinimized())
479 MinimizePanel(window_state->window()); 479 MinimizePanel(window_state->window());
480 else 480 else
481 RestorePanel(window_state->window()); 481 RestorePanel(window_state->window());
482 } 482 }
483 483
484 void PanelLayoutManager::OnWindowVisibilityChanged(
485 aura::Window* window, bool visible) {
486 if (visible)
487 wm::GetWindowState(window)->Restore();
488 }
489
490 //////////////////////////////////////////////////////////////////////////////// 484 ////////////////////////////////////////////////////////////////////////////////
491 // PanelLayoutManager, aura::client::ActivationChangeObserver implementation: 485 // PanelLayoutManager, aura::client::ActivationChangeObserver implementation:
492 486
493 void PanelLayoutManager::OnWindowActivated(aura::Window* gained_active, 487 void PanelLayoutManager::OnWindowActivated(aura::Window* gained_active,
494 aura::Window* lost_active) { 488 aura::Window* lost_active) {
495 // Ignore if the panel that is not managed by this was activated. 489 // Ignore if the panel that is not managed by this was activated.
496 if (gained_active && gained_active->type() == ui::wm::WINDOW_TYPE_PANEL && 490 if (gained_active && gained_active->type() == ui::wm::WINDOW_TYPE_PANEL &&
497 gained_active->parent() == panel_container_) { 491 gained_active->parent() == panel_container_) {
498 UpdateStacking(gained_active); 492 UpdateStacking(gained_active);
499 UpdateCallouts(); 493 UpdateCallouts();
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
886 880
887 void PanelLayoutManager::OnKeyboardBoundsChanging( 881 void PanelLayoutManager::OnKeyboardBoundsChanging(
888 const gfx::Rect& keyboard_bounds) { 882 const gfx::Rect& keyboard_bounds) {
889 // This bounds change will have caused a change to the Shelf which does not 883 // This bounds change will have caused a change to the Shelf which does not
890 // propogate automatically to this class, so manually recalculate bounds. 884 // propogate automatically to this class, so manually recalculate bounds.
891 OnWindowResized(); 885 OnWindowResized();
892 } 886 }
893 887
894 } // namespace internal 888 } // namespace internal
895 } // namespace ash 889 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/panels/panel_layout_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698