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

Side by Side Diff: ash/launcher/launcher_view.cc

Issue 24141003: ash: Fix crash in launcher tooltip manager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase, fix nit Created 7 years, 3 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/launcher/launcher_tooltip_manager.h ('k') | ash/launcher/launcher_view_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 (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/launcher/launcher_view.h" 5 #include "ash/launcher/launcher_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ash/ash_constants.h" 9 #include "ash/ash_constants.h"
10 #include "ash/ash_switches.h" 10 #include "ash/ash_switches.h"
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 views::ImageButton::ALIGN_CENTER), 470 views::ImageButton::ALIGN_CENTER),
471 shelf->SelectValueForShelfAlignment( 471 shelf->SelectValueForShelfAlignment(
472 views::ImageButton::ALIGN_TOP, 472 views::ImageButton::ALIGN_TOP,
473 views::ImageButton::ALIGN_MIDDLE, 473 views::ImageButton::ALIGN_MIDDLE,
474 views::ImageButton::ALIGN_MIDDLE, 474 views::ImageButton::ALIGN_MIDDLE,
475 views::ImageButton::ALIGN_BOTTOM)); 475 views::ImageButton::ALIGN_BOTTOM));
476 } 476 }
477 if (i >= first_visible_index_ && i <= last_visible_index_) 477 if (i >= first_visible_index_ && i <= last_visible_index_)
478 view_model_->view_at(i)->Layout(); 478 view_model_->view_at(i)->Layout();
479 } 479 }
480 tooltip_->UpdateArrow(); 480 tooltip_->Close();
481 if (overflow_bubble_) 481 if (overflow_bubble_)
482 overflow_bubble_->Hide(); 482 overflow_bubble_->Hide();
483 } 483 }
484 484
485 void LauncherView::SchedulePaintForAllButtons() { 485 void LauncherView::SchedulePaintForAllButtons() {
486 for (int i = 0; i < view_model_->view_size(); ++i) { 486 for (int i = 0; i < view_model_->view_size(); ++i) {
487 if (i >= first_visible_index_ && i <= last_visible_index_) 487 if (i >= first_visible_index_ && i <= last_visible_index_)
488 view_model_->view_at(i)->SchedulePaint(); 488 view_model_->view_at(i)->SchedulePaint();
489 } 489 }
490 if (overflow_button_ && overflow_button_->visible()) 490 if (overflow_button_ && overflow_button_->visible())
(...skipping 954 matching lines...) Expand 10 before | Expand all | Expand 10 after
1445 // above animation finishes, CalculateIdealBounds will be called to get 1445 // above animation finishes, CalculateIdealBounds will be called to get
1446 // correct overflow range. CalculateIdealBounds could hide overflow bubble 1446 // correct overflow range. CalculateIdealBounds could hide overflow bubble
1447 // and triggers LauncherItemChanged. And since we are still in the middle 1447 // and triggers LauncherItemChanged. And since we are still in the middle
1448 // of LauncherItemRemoved, LauncherView in overflow bubble is not synced 1448 // of LauncherItemRemoved, LauncherView in overflow bubble is not synced
1449 // with LauncherModel and will crash. 1449 // with LauncherModel and will crash.
1450 if (overflow_bubble_ && overflow_bubble_->IsShowing()) { 1450 if (overflow_bubble_ && overflow_bubble_->IsShowing()) {
1451 last_hidden_index_ = std::min(last_hidden_index_, 1451 last_hidden_index_ = std::min(last_hidden_index_,
1452 view_model_->view_size() - 1); 1452 view_model_->view_size() - 1);
1453 UpdateOverflowRange(overflow_bubble_->launcher_view()); 1453 UpdateOverflowRange(overflow_bubble_->launcher_view());
1454 } 1454 }
1455
1456 // Close the tooltip because it isn't needed any longer and its anchor view
1457 // will be deleted soon.
1458 if (tooltip_->GetCurrentAnchorView() == view)
1459 tooltip_->Close();
1455 } 1460 }
1456 1461
1457 void LauncherView::LauncherItemChanged(int model_index, 1462 void LauncherView::LauncherItemChanged(int model_index,
1458 const ash::LauncherItem& old_item) { 1463 const ash::LauncherItem& old_item) {
1459 const LauncherItem& item(model_->items()[model_index]); 1464 const LauncherItem& item(model_->items()[model_index]);
1460 if (old_item.type != item.type) { 1465 if (old_item.type != item.type) {
1461 // Type changed, swap the views. 1466 // Type changed, swap the views.
1462 model_index = CancelDrag(model_index); 1467 model_index = CancelDrag(model_index);
1463 scoped_ptr<views::View> old_view(view_model_->view_at(model_index)); 1468 scoped_ptr<views::View> old_view(view_model_->view_at(model_index));
1464 bounds_animator_->StopAnimatingView(old_view.get()); 1469 bounds_animator_->StopAnimatingView(old_view.get());
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
1889 break; 1894 break;
1890 case ash::SHELF_ALIGNMENT_TOP: 1895 case ash::SHELF_ALIGNMENT_TOP:
1891 distance = coordinate.y() - bounds.bottom(); 1896 distance = coordinate.y() - bounds.bottom();
1892 break; 1897 break;
1893 } 1898 }
1894 return distance > 0 ? distance : 0; 1899 return distance > 0 ? distance : 0;
1895 } 1900 }
1896 1901
1897 } // namespace internal 1902 } // namespace internal
1898 } // namespace ash 1903 } // namespace ash
OLDNEW
« no previous file with comments | « ash/launcher/launcher_tooltip_manager.h ('k') | ash/launcher/launcher_view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698