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

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

Issue 10388036: Adds the option of aligning the launcher to the left or right. There (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix compile Created 8 years, 7 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_view.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 "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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « ash/launcher/launcher_view.h ('k') | ash/launcher/launcher_view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698