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/launcher/launcher_view.h" | 5 #include "ash/launcher/launcher_view.h" |
6 | 6 |
7 #include "ash/launcher/launcher_button.h" | 7 #include "ash/launcher/launcher_button.h" |
8 #include "ash/launcher/launcher_delegate.h" | 8 #include "ash/launcher/launcher_delegate.h" |
9 #include "ash/launcher/launcher_icon_observer.h" | 9 #include "ash/launcher/launcher_icon_observer.h" |
10 #include "ash/launcher/launcher_model.h" | 10 #include "ash/launcher/launcher_model.h" |
(...skipping 27 matching lines...) Expand all Loading... |
38 | 38 |
39 namespace ash { | 39 namespace ash { |
40 namespace internal { | 40 namespace internal { |
41 | 41 |
42 // Amount content is inset on the left edge. | 42 // Amount content is inset on the left edge. |
43 static const int kLeadingInset = 8; | 43 static const int kLeadingInset = 8; |
44 | 44 |
45 // Minimum distance before drag starts. | 45 // Minimum distance before drag starts. |
46 static const int kMinimumDragDistance = 8; | 46 static const int kMinimumDragDistance = 8; |
47 | 47 |
48 // Size given to the buttons on the launcher. | 48 // Size between the buttons. |
49 static const int kButtonWidth = 48; | |
50 static const int kButtonHeight = 48; | |
51 static const int kButtonSpacing = 4; | 49 static const int kButtonSpacing = 4; |
52 | 50 |
53 namespace { | 51 namespace { |
54 | 52 |
55 // Custom FocusSearch used to navigate the launcher in the order items are in | 53 // Custom FocusSearch used to navigate the launcher in the order items are in |
56 // the ViewModel. | 54 // the ViewModel. |
57 class LauncherFocusSearch : public views::FocusSearch { | 55 class LauncherFocusSearch : public views::FocusSearch { |
58 public: | 56 public: |
59 LauncherFocusSearch(views::ViewModel* view_model) | 57 LauncherFocusSearch(views::ViewModel* view_model) |
60 : FocusSearch(NULL, true, true), | 58 : FocusSearch(NULL, true, true), |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 LauncherView::LauncherView(LauncherModel* model, LauncherDelegate* delegate) | 241 LauncherView::LauncherView(LauncherModel* model, LauncherDelegate* delegate) |
244 : model_(model), | 242 : model_(model), |
245 delegate_(delegate), | 243 delegate_(delegate), |
246 view_model_(new views::ViewModel), | 244 view_model_(new views::ViewModel), |
247 last_visible_index_(-1), | 245 last_visible_index_(-1), |
248 overflow_button_(NULL), | 246 overflow_button_(NULL), |
249 dragging_(NULL), | 247 dragging_(NULL), |
250 drag_view_(NULL), | 248 drag_view_(NULL), |
251 drag_offset_(0), | 249 drag_offset_(0), |
252 start_drag_index_(-1), | 250 start_drag_index_(-1), |
253 context_menu_id_(0) { | 251 context_menu_id_(0), |
| 252 alignment_(SHELF_ALIGNMENT_BOTTOM) { |
254 DCHECK(model_); | 253 DCHECK(model_); |
255 bounds_animator_.reset(new views::BoundsAnimator(this)); | 254 bounds_animator_.reset(new views::BoundsAnimator(this)); |
256 set_context_menu_controller(this); | 255 set_context_menu_controller(this); |
257 focus_search_.reset(new LauncherFocusSearch(view_model_.get())); | 256 focus_search_.reset(new LauncherFocusSearch(view_model_.get())); |
258 } | 257 } |
259 | 258 |
260 LauncherView::~LauncherView() { | 259 LauncherView::~LauncherView() { |
261 model_->RemoveObserver(this); | 260 model_->RemoveObserver(this); |
262 } | 261 } |
263 | 262 |
(...skipping 22 matching lines...) Expand all Loading... |
286 rb.GetImageNamed(IDR_AURA_LAUNCHER_OVERFLOW_PUSHED).ToSkBitmap()); | 285 rb.GetImageNamed(IDR_AURA_LAUNCHER_OVERFLOW_PUSHED).ToSkBitmap()); |
287 overflow_button_->SetAccessibleName( | 286 overflow_button_->SetAccessibleName( |
288 l10n_util::GetStringUTF16(IDS_AURA_LAUNCHER_OVERFLOW_NAME)); | 287 l10n_util::GetStringUTF16(IDS_AURA_LAUNCHER_OVERFLOW_NAME)); |
289 overflow_button_->set_context_menu_controller(this); | 288 overflow_button_->set_context_menu_controller(this); |
290 ConfigureChildView(overflow_button_); | 289 ConfigureChildView(overflow_button_); |
291 AddChildView(overflow_button_); | 290 AddChildView(overflow_button_); |
292 | 291 |
293 // We'll layout when our bounds change. | 292 // We'll layout when our bounds change. |
294 } | 293 } |
295 | 294 |
| 295 void LauncherView::SetAlignment(ShelfAlignment alignment) { |
| 296 if (alignment_ == alignment) |
| 297 return; |
| 298 alignment_ = alignment; |
| 299 LayoutToIdealBounds(); |
| 300 } |
| 301 |
296 gfx::Rect LauncherView::GetIdealBoundsOfItemIcon(LauncherID id) { | 302 gfx::Rect LauncherView::GetIdealBoundsOfItemIcon(LauncherID id) { |
297 int index = model_->ItemIndexByID(id); | 303 int index = model_->ItemIndexByID(id); |
298 if (index == -1 || index > last_visible_index_) | 304 if (index == -1 || index > last_visible_index_) |
299 return gfx::Rect(); | 305 return gfx::Rect(); |
300 const gfx::Rect& ideal_bounds(view_model_->ideal_bounds(index)); | 306 const gfx::Rect& ideal_bounds(view_model_->ideal_bounds(index)); |
301 DCHECK_NE(TYPE_APP_LIST, model_->items()[index].type); | 307 DCHECK_NE(TYPE_APP_LIST, model_->items()[index].type); |
302 LauncherButton* button = | 308 LauncherButton* button = |
303 static_cast<LauncherButton*>(view_model_->view_at(index)); | 309 static_cast<LauncherButton*>(view_model_->view_at(index)); |
304 gfx::Rect icon_bounds = button->GetIconBounds(); | 310 gfx::Rect icon_bounds = button->GetIconBounds(); |
305 return gfx::Rect(ideal_bounds.x() + icon_bounds.x(), | 311 return gfx::Rect(ideal_bounds.x() + icon_bounds.x(), |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 } | 349 } |
344 | 350 |
345 void LauncherView::LayoutToIdealBounds() { | 351 void LauncherView::LayoutToIdealBounds() { |
346 IdealBounds ideal_bounds; | 352 IdealBounds ideal_bounds; |
347 CalculateIdealBounds(&ideal_bounds); | 353 CalculateIdealBounds(&ideal_bounds); |
348 views::ViewModelUtils::SetViewBoundsToIdealBounds(*view_model_); | 354 views::ViewModelUtils::SetViewBoundsToIdealBounds(*view_model_); |
349 overflow_button_->SetBoundsRect(ideal_bounds.overflow_bounds); | 355 overflow_button_->SetBoundsRect(ideal_bounds.overflow_bounds); |
350 } | 356 } |
351 | 357 |
352 void LauncherView::CalculateIdealBounds(IdealBounds* bounds) { | 358 void LauncherView::CalculateIdealBounds(IdealBounds* bounds) { |
353 int available_width = width(); | 359 int available_size = primary_axis_coordinate(width(), height()); |
354 if (!available_width) | 360 if (!available_size) |
355 return; | 361 return; |
356 | 362 |
357 int x = kLeadingInset; | 363 int x = primary_axis_coordinate(kLeadingInset, 0); |
| 364 int y = primary_axis_coordinate(0, kLeadingInset); |
358 for (int i = 0; i < view_model_->view_size(); ++i) { | 365 for (int i = 0; i < view_model_->view_size(); ++i) { |
359 gfx::Size pref(kButtonWidth, kButtonHeight); | |
360 view_model_->set_ideal_bounds(i, gfx::Rect( | 366 view_model_->set_ideal_bounds(i, gfx::Rect( |
361 x, (kLauncherPreferredHeight - pref.height()) / 2, pref.width(), | 367 x, y, kLauncherPreferredSize, kLauncherPreferredSize)); |
362 pref.height())); | 368 x = primary_axis_coordinate(x + kLauncherPreferredSize + kButtonSpacing, 0); |
363 x += pref.width() + kButtonSpacing; | 369 y = primary_axis_coordinate(0, y + kLauncherPreferredSize + kButtonSpacing); |
364 } | 370 } |
365 | 371 |
366 bounds->overflow_bounds.set_size(gfx::Size(kButtonWidth, kButtonHeight)); | 372 bounds->overflow_bounds.set_size( |
| 373 gfx::Size(kLauncherPreferredSize, kLauncherPreferredSize)); |
367 last_visible_index_ = DetermineLastVisibleIndex( | 374 last_visible_index_ = DetermineLastVisibleIndex( |
368 available_width - kLeadingInset - bounds->overflow_bounds.width() - | 375 available_size - kLeadingInset - kLauncherPreferredSize - |
369 kButtonSpacing - kButtonWidth); | 376 kButtonSpacing - kLauncherPreferredSize); |
370 int app_list_index = view_model_->view_size() - 1; | 377 int app_list_index = view_model_->view_size() - 1; |
371 bool show_overflow = (last_visible_index_ + 1 < app_list_index); | 378 bool show_overflow = (last_visible_index_ + 1 < app_list_index); |
372 | 379 |
373 for (int i = 0; i < view_model_->view_size(); ++i) { | 380 for (int i = 0; i < view_model_->view_size(); ++i) { |
374 view_model_->view_at(i)->SetVisible( | 381 view_model_->view_at(i)->SetVisible( |
375 i == app_list_index || i <= last_visible_index_); | 382 i == app_list_index || i <= last_visible_index_); |
376 } | 383 } |
377 | 384 |
378 overflow_button_->SetVisible(show_overflow); | 385 overflow_button_->SetVisible(show_overflow); |
379 if (show_overflow) { | 386 if (show_overflow) { |
380 DCHECK_NE(0, view_model_->view_size()); | 387 DCHECK_NE(0, view_model_->view_size()); |
381 // We always want the app list visible. | 388 if (last_visible_index_ == -1) { |
| 389 x = primary_axis_coordinate(kLeadingInset, 0); |
| 390 y = primary_axis_coordinate(0, kLeadingInset); |
| 391 } else { |
| 392 x = primary_axis_coordinate( |
| 393 view_model_->ideal_bounds(last_visible_index_).right(), 0); |
| 394 y = primary_axis_coordinate(0, |
| 395 view_model_->ideal_bounds(last_visible_index_).bottom()); |
| 396 } |
382 gfx::Rect app_list_bounds = view_model_->ideal_bounds(app_list_index); | 397 gfx::Rect app_list_bounds = view_model_->ideal_bounds(app_list_index); |
383 x = last_visible_index_ == -1 ? | |
384 kLeadingInset : view_model_->ideal_bounds(last_visible_index_).right(); | |
385 app_list_bounds.set_x(x); | 398 app_list_bounds.set_x(x); |
| 399 app_list_bounds.set_y(y); |
386 view_model_->set_ideal_bounds(app_list_index, app_list_bounds); | 400 view_model_->set_ideal_bounds(app_list_index, app_list_bounds); |
387 x = app_list_bounds.right() + kButtonSpacing; | 401 x = primary_axis_coordinate(x + kLauncherPreferredSize + kButtonSpacing, 0); |
| 402 y = primary_axis_coordinate(0, y + kLauncherPreferredSize + kButtonSpacing); |
388 bounds->overflow_bounds.set_x(x); | 403 bounds->overflow_bounds.set_x(x); |
389 bounds->overflow_bounds.set_y( | 404 bounds->overflow_bounds.set_y(y); |
390 (kLauncherPreferredHeight - bounds->overflow_bounds.height()) / 2); | |
391 } | 405 } |
392 } | 406 } |
393 | 407 |
394 int LauncherView::DetermineLastVisibleIndex(int max_x) { | 408 int LauncherView::DetermineLastVisibleIndex(int max_value) { |
395 int index = view_model_->view_size() - 1; | 409 int index = view_model_->view_size() - 1; |
396 while (index >= 0 && view_model_->ideal_bounds(index).right() > max_x) | 410 while (index >= 0 && |
| 411 primary_axis_coordinate( |
| 412 view_model_->ideal_bounds(index).right(), |
| 413 view_model_->ideal_bounds(index).bottom()) > max_value) { |
397 index--; | 414 index--; |
| 415 } |
398 return index; | 416 return index; |
399 } | 417 } |
400 | 418 |
401 void LauncherView::AddIconObserver(LauncherIconObserver* observer) { | 419 void LauncherView::AddIconObserver(LauncherIconObserver* observer) { |
402 observers_.AddObserver(observer); | 420 observers_.AddObserver(observer); |
403 } | 421 } |
404 | 422 |
405 void LauncherView::RemoveIconObserver(LauncherIconObserver* observer) { | 423 void LauncherView::RemoveIconObserver(LauncherIconObserver* observer) { |
406 observers_.RemoveObserver(observer); | 424 observers_.RemoveObserver(observer); |
407 } | 425 } |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
504 return; | 522 return; |
505 } | 523 } |
506 | 524 |
507 // Move the view to the front so that it appears on top of other views. | 525 // Move the view to the front so that it appears on top of other views. |
508 ReorderChildView(drag_view_, -1); | 526 ReorderChildView(drag_view_, -1); |
509 bounds_animator_->StopAnimatingView(drag_view_); | 527 bounds_animator_->StopAnimatingView(drag_view_); |
510 } | 528 } |
511 | 529 |
512 void LauncherView::ContinueDrag(const views::MouseEvent& event) { | 530 void LauncherView::ContinueDrag(const views::MouseEvent& event) { |
513 // TODO: I don't think this works correctly with RTL. | 531 // TODO: I don't think this works correctly with RTL. |
514 gfx::Point drag_point(event.x(), 0); | 532 gfx::Point drag_point(event.location()); |
515 views::View::ConvertPointToView(drag_view_, this, &drag_point); | 533 views::View::ConvertPointToView(drag_view_, this, &drag_point); |
516 int current_index = view_model_->GetIndexOfView(drag_view_); | 534 int current_index = view_model_->GetIndexOfView(drag_view_); |
517 DCHECK_NE(-1, current_index); | 535 DCHECK_NE(-1, current_index); |
518 | 536 |
519 // If the item is no longer draggable, bail out. | 537 // If the item is no longer draggable, bail out. |
520 if (current_index == -1 || | 538 if (current_index == -1 || |
521 !delegate_->IsDraggable(model_->items()[current_index])) { | 539 !delegate_->IsDraggable(model_->items()[current_index])) { |
522 CancelDrag(NULL); | 540 CancelDrag(NULL); |
523 return; | 541 return; |
524 } | 542 } |
525 | 543 |
526 // Constrain the x location to the range of valid indices for the type. | 544 // Constrain the location to the range of valid indices for the type. |
527 std::pair<int,int> indices(GetDragRange(current_index)); | 545 std::pair<int,int> indices(GetDragRange(current_index)); |
528 int x = std::max(view_model_->ideal_bounds(indices.first).x(), | 546 int last_drag_index = indices.second; |
529 drag_point.x() - drag_offset_); | 547 // If the last index isn't valid, we're overflowing. Constrain to the app list |
530 if (view_model_->view_at(indices.second)->visible()) { | 548 // (which is the last visible item). |
531 x = std::min(view_model_->ideal_bounds(indices.second).right() - | 549 if (last_drag_index > last_visible_index_) |
| 550 last_drag_index = last_visible_index_; |
| 551 int x = 0, y = 0; |
| 552 if (is_horizontal_alignment()) { |
| 553 x = std::max(view_model_->ideal_bounds(indices.first).x(), |
| 554 drag_point.x() - drag_offset_); |
| 555 x = std::min(view_model_->ideal_bounds(last_drag_index).right() - |
532 view_model_->ideal_bounds(current_index).width(), | 556 view_model_->ideal_bounds(current_index).width(), |
533 x); | 557 x); |
| 558 if (drag_view_->x() == x) |
| 559 return; |
| 560 drag_view_->SetX(x); |
534 } else { | 561 } else { |
535 // If the last index isn't valid, we're overflowing. Constrain to the app | 562 y = std::max(view_model_->ideal_bounds(indices.first).y(), |
536 // list (which is the last visible item). | 563 drag_point.y() - drag_offset_); |
537 x = std::min( | 564 y = std::min(view_model_->ideal_bounds(last_drag_index).bottom() - |
538 view_model_->ideal_bounds(view_model_->view_size() - 1).right() - | 565 view_model_->ideal_bounds(current_index).height(), |
539 view_model_->ideal_bounds(current_index).width(), | 566 y); |
540 x); | 567 if (drag_view_->y() == y) |
| 568 return; |
| 569 drag_view_->SetY(y); |
541 } | 570 } |
542 if (drag_view_->x() == x) | |
543 return; | |
544 | 571 |
545 drag_view_->SetX(x); | |
546 int target_index = | 572 int target_index = |
547 views::ViewModelUtils::DetermineMoveIndex(*view_model_, drag_view_, x); | 573 views::ViewModelUtils::DetermineMoveIndex( |
| 574 *view_model_, drag_view_, |
| 575 is_horizontal_alignment() ? |
| 576 views::ViewModelUtils::HORIZONTAL : |
| 577 views::ViewModelUtils::VERTICAL, |
| 578 x, y); |
548 target_index = | 579 target_index = |
549 std::min(indices.second, std::max(target_index, indices.first)); | 580 std::min(indices.second, std::max(target_index, indices.first)); |
550 if (target_index == current_index) | 581 if (target_index == current_index) |
551 return; | 582 return; |
552 | 583 |
553 // Remove the observer while we mutate the model so that we don't attempt to | 584 // Remove the observer while we mutate the model so that we don't attempt to |
554 // cancel the drag. | 585 // cancel the drag. |
555 model_->RemoveObserver(this); | 586 model_->RemoveObserver(this); |
556 model_->Move(current_index, target_index); | 587 model_->Move(current_index, target_index); |
557 model_->AddObserver(this); | 588 model_->AddObserver(this); |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
664 if (!was_dragging) | 695 if (!was_dragging) |
665 return; | 696 return; |
666 | 697 |
667 view_model_->Move(view_model_->GetIndexOfView(drag_view), start_drag_index_); | 698 view_model_->Move(view_model_->GetIndexOfView(drag_view), start_drag_index_); |
668 AnimateToIdealBounds(); | 699 AnimateToIdealBounds(); |
669 } | 700 } |
670 | 701 |
671 gfx::Size LauncherView::GetPreferredSize() { | 702 gfx::Size LauncherView::GetPreferredSize() { |
672 IdealBounds ideal_bounds; | 703 IdealBounds ideal_bounds; |
673 CalculateIdealBounds(&ideal_bounds); | 704 CalculateIdealBounds(&ideal_bounds); |
| 705 if (is_horizontal_alignment()) { |
| 706 if (view_model_->view_size() >= 2) { |
| 707 // Should always have two items. |
| 708 return gfx::Size(view_model_->ideal_bounds(1).right() + kLeadingInset, |
| 709 kLauncherPreferredSize); |
| 710 } |
| 711 return gfx::Size(kLauncherPreferredSize * 2 + kLeadingInset * 2, |
| 712 kLauncherPreferredSize); |
| 713 } |
674 if (view_model_->view_size() >= 2) { | 714 if (view_model_->view_size() >= 2) { |
675 // Should always have two items. | 715 // Should always have two items. |
676 return gfx::Size(view_model_->ideal_bounds(1).right() + kLeadingInset, | 716 return gfx::Size(kLauncherPreferredSize, |
677 kLauncherPreferredHeight); | 717 view_model_->ideal_bounds(1).bottom() + kLeadingInset); |
678 } | 718 } |
679 return gfx::Size(kButtonWidth * 2 + kLeadingInset * 2, | 719 return gfx::Size(kLauncherPreferredSize, |
680 kLauncherPreferredHeight); | 720 kLauncherPreferredSize * 2 + kLeadingInset * 2); |
681 } | 721 } |
682 | 722 |
683 void LauncherView::OnBoundsChanged(const gfx::Rect& previous_bounds) { | 723 void LauncherView::OnBoundsChanged(const gfx::Rect& previous_bounds) { |
684 LayoutToIdealBounds(); | 724 LayoutToIdealBounds(); |
685 FOR_EACH_OBSERVER(LauncherIconObserver, observers_, | 725 FOR_EACH_OBSERVER(LauncherIconObserver, observers_, |
686 OnLauncherIconPositionsChanged()); | 726 OnLauncherIconPositionsChanged()); |
687 } | 727 } |
688 | 728 |
689 views::FocusTraversable* LauncherView::GetPaneFocusTraversable() { | 729 views::FocusTraversable* LauncherView::GetPaneFocusTraversable() { |
690 return this; | 730 return this; |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
801 | 841 |
802 void LauncherView::MousePressedOnButton(views::View* view, | 842 void LauncherView::MousePressedOnButton(views::View* view, |
803 const views::MouseEvent& event) { | 843 const views::MouseEvent& event) { |
804 int index = view_model_->GetIndexOfView(view); | 844 int index = view_model_->GetIndexOfView(view); |
805 if (index == -1 || | 845 if (index == -1 || |
806 view_model_->view_size() <= 1 || | 846 view_model_->view_size() <= 1 || |
807 !delegate_->IsDraggable(model_->items()[index])) | 847 !delegate_->IsDraggable(model_->items()[index])) |
808 return; // View is being deleted or not draggable, ignore request. | 848 return; // View is being deleted or not draggable, ignore request. |
809 | 849 |
810 drag_view_ = view; | 850 drag_view_ = view; |
811 drag_offset_ = event.x(); | 851 drag_offset_ = primary_axis_coordinate(event.x(), event.y()); |
812 } | 852 } |
813 | 853 |
814 void LauncherView::MouseDraggedOnButton(views::View* view, | 854 void LauncherView::MouseDraggedOnButton(views::View* view, |
815 const views::MouseEvent& event) { | 855 const views::MouseEvent& event) { |
816 if (!dragging_ && drag_view_ && | 856 if (!dragging_ && drag_view_ && |
817 abs(event.x() - drag_offset_) >= kMinimumDragDistance) | 857 primary_axis_coordinate(abs(event.x() - drag_offset_), |
| 858 abs(event.y() - drag_offset_)) >= |
| 859 kMinimumDragDistance) { |
818 PrepareForDrag(event); | 860 PrepareForDrag(event); |
| 861 } |
819 if (dragging_) | 862 if (dragging_) |
820 ContinueDrag(event); | 863 ContinueDrag(event); |
821 } | 864 } |
822 | 865 |
823 void LauncherView::MouseReleasedOnButton(views::View* view, | 866 void LauncherView::MouseReleasedOnButton(views::View* view, |
824 bool canceled) { | 867 bool canceled) { |
825 if (canceled) { | 868 if (canceled) { |
826 CancelDrag(NULL); | 869 CancelDrag(NULL); |
827 } else { | 870 } else { |
828 dragging_ = false; | 871 dragging_ = false; |
829 drag_view_ = NULL; | 872 drag_view_ = NULL; |
830 AnimateToIdealBounds(); | 873 AnimateToIdealBounds(); |
831 } | 874 } |
832 } | 875 } |
833 | 876 |
834 void LauncherView::MouseExitedButton(views::View* view) { | 877 void LauncherView::MouseExitedButton(views::View* view) { |
835 } | 878 } |
836 | 879 |
| 880 ShelfAlignment LauncherView::GetShelfAlignment() const { |
| 881 return alignment_; |
| 882 } |
| 883 |
837 string16 LauncherView::GetAccessibleName(const views::View* view) { | 884 string16 LauncherView::GetAccessibleName(const views::View* view) { |
838 if (!delegate_) | 885 if (!delegate_) |
839 return string16(); | 886 return string16(); |
840 int view_index = view_model_->GetIndexOfView(view); | 887 int view_index = view_model_->GetIndexOfView(view); |
841 // May be -1 while in the process of animating closed. | 888 // May be -1 while in the process of animating closed. |
842 if (view_index == -1) | 889 if (view_index == -1) |
843 return string16(); | 890 return string16(); |
844 | 891 |
845 switch (model_->items()[view_index].type) { | 892 switch (model_->items()[view_index].type) { |
846 case TYPE_TABBED: | 893 case TYPE_TABBED: |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
923 source->GetWidget(), NULL, gfx::Rect(point, gfx::Size()), | 970 source->GetWidget(), NULL, gfx::Rect(point, gfx::Size()), |
924 views::MenuItemView::TOPLEFT, 0) == views::MenuRunner::MENU_DELETED) | 971 views::MenuItemView::TOPLEFT, 0) == views::MenuRunner::MENU_DELETED) |
925 return; | 972 return; |
926 | 973 |
927 Shell::GetInstance()->UpdateShelfVisibility(); | 974 Shell::GetInstance()->UpdateShelfVisibility(); |
928 #endif | 975 #endif |
929 } | 976 } |
930 | 977 |
931 } // namespace internal | 978 } // namespace internal |
932 } // namespace ash | 979 } // namespace ash |
OLD | NEW |