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

Side by Side Diff: views/view.cc

Issue 6267013: Delay deletion of view in View::DoRemoveChildView (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 11 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 | « no previous file | 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "views/view.h" 5 #include "views/view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #ifndef NDEBUG 8 #ifndef NDEBUG
9 #include <iostream> 9 #include <iostream>
10 #endif 10 #endif
11 11
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/message_loop.h" 13 #include "base/message_loop.h"
14 #include "base/scoped_ptr.h"
14 #include "base/utf_string_conversions.h" 15 #include "base/utf_string_conversions.h"
15 #include "gfx/canvas_skia.h" 16 #include "gfx/canvas_skia.h"
16 #include "gfx/path.h" 17 #include "gfx/path.h"
17 #include "third_party/skia/include/core/SkShader.h" 18 #include "third_party/skia/include/core/SkShader.h"
18 #include "ui/base/dragdrop/drag_drop_types.h" 19 #include "ui/base/dragdrop/drag_drop_types.h"
19 #include "views/background.h" 20 #include "views/background.h"
20 #include "views/layout_manager.h" 21 #include "views/layout_manager.h"
21 #include "views/views_delegate.h" 22 #include "views/views_delegate.h"
22 #include "views/widget/root_view.h" 23 #include "views/widget/root_view.h"
23 #include "views/widget/tooltip_manager.h" 24 #include "views/widget/tooltip_manager.h"
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after
624 bool delete_removed_view) { 625 bool delete_removed_view) {
625 #ifndef NDEBUG 626 #ifndef NDEBUG
626 DCHECK(!IsProcessingPaint()) << "Should not be removing a child view " << 627 DCHECK(!IsProcessingPaint()) << "Should not be removing a child view " <<
627 "during a paint, this will seriously " << 628 "during a paint, this will seriously " <<
628 "mess things up!"; 629 "mess things up!";
629 #endif 630 #endif
630 DCHECK(a_view); 631 DCHECK(a_view);
631 const ViewList::iterator i = find(child_views_.begin(), 632 const ViewList::iterator i = find(child_views_.begin(),
632 child_views_.end(), 633 child_views_.end(),
633 a_view); 634 a_view);
635 scoped_ptr<View> view_to_be_deleted;
634 if (i != child_views_.end()) { 636 if (i != child_views_.end()) {
635 if (update_focus_cycle) { 637 if (update_focus_cycle) {
636 // Let's remove the view from the focus traversal. 638 // Let's remove the view from the focus traversal.
637 View* next_focusable = a_view->next_focusable_view_; 639 View* next_focusable = a_view->next_focusable_view_;
638 View* prev_focusable = a_view->previous_focusable_view_; 640 View* prev_focusable = a_view->previous_focusable_view_;
639 if (prev_focusable) 641 if (prev_focusable)
640 prev_focusable->next_focusable_view_ = next_focusable; 642 prev_focusable->next_focusable_view_ = next_focusable;
641 if (next_focusable) 643 if (next_focusable)
642 next_focusable->previous_focusable_view_ = prev_focusable; 644 next_focusable->previous_focusable_view_ = prev_focusable;
643 } 645 }
644 646
645 RootView* root = GetRootView(); 647 RootView* root = GetRootView();
646 if (root) 648 if (root)
647 UnregisterChildrenForVisibleBoundsNotification(root, a_view); 649 UnregisterChildrenForVisibleBoundsNotification(root, a_view);
648 a_view->PropagateRemoveNotifications(this); 650 a_view->PropagateRemoveNotifications(this);
649 a_view->SetParent(NULL); 651 a_view->SetParent(NULL);
650 652
651 if (delete_removed_view && a_view->IsParentOwned()) 653 if (delete_removed_view && a_view->IsParentOwned())
652 delete a_view; 654 view_to_be_deleted.reset(a_view);
653 655
654 child_views_.erase(i); 656 child_views_.erase(i);
655 } 657 }
656 658
657 if (update_tool_tip) 659 if (update_tool_tip)
658 UpdateTooltip(); 660 UpdateTooltip();
659 661
660 if (layout_manager_.get()) 662 if (layout_manager_.get())
661 layout_manager_->ViewRemoved(this, a_view); 663 layout_manager_->ViewRemoved(this, a_view);
662 } 664 }
(...skipping 867 matching lines...) Expand 10 before | Expand all | Expand 10 after
1530 possible_drag = false; 1532 possible_drag = false;
1531 start_pt = gfx::Point(); 1533 start_pt = gfx::Point();
1532 } 1534 }
1533 1535
1534 void View::DragInfo::PossibleDrag(const gfx::Point& p) { 1536 void View::DragInfo::PossibleDrag(const gfx::Point& p) {
1535 possible_drag = true; 1537 possible_drag = true;
1536 start_pt = p; 1538 start_pt = p;
1537 } 1539 }
1538 1540
1539 } // namespace 1541 } // namespace
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698