diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-24 04:48:06 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-24 04:48:06 +0000 |
commit | 04709cd21d245f10011aa32fbaece09abd25e9bc (patch) | |
tree | 43081b2b120aff314334682240bca035eb5f1c20 /ash/launcher/launcher_view.cc | |
parent | ef8c3cf92c861312add2f43c3427eff8ce98ecda (diff) | |
download | chromium_src-04709cd21d245f10011aa32fbaece09abd25e9bc.zip chromium_src-04709cd21d245f10011aa32fbaece09abd25e9bc.tar.gz chromium_src-04709cd21d245f10011aa32fbaece09abd25e9bc.tar.bz2 |
Changes the launcher around so that it's up to the shell to populate it
and that each item isn't associated with a window. This allows the
chrome side to populate the launcher with items that correspond to app
tabs.
BUG=110827
TEST=none
R=ben@chromium.org
Review URL: https://chromiumcodereview.appspot.com/9271007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@118800 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/launcher/launcher_view.cc')
-rw-r--r-- | ash/launcher/launcher_view.cc | 80 |
1 files changed, 55 insertions, 25 deletions
diff --git a/ash/launcher/launcher_view.cc b/ash/launcher/launcher_view.cc index 9d5a913..8826b37 100644 --- a/ash/launcher/launcher_view.cc +++ b/ash/launcher/launcher_view.cc @@ -399,29 +399,37 @@ void LauncherView::ConfigureChildView(views::View* view) { view->layer()->SetFillsBoundsOpaquely(false); } -void LauncherView::GetOverflowWindows(std::vector<aura::Window*>* names) { +void LauncherView::GetOverflowItems(std::vector<LauncherItem>* items) { int index = 0; while (index < view_model_->view_size() && view_model_->view_at(index)->visible()) { index++; } while (index < view_model_->view_size()) { - names->push_back(model_->items()[index].window); + const LauncherItem& item = model_->items()[index]; + if (item.type == TYPE_TABBED || item.type == TYPE_APP) + items->push_back(item); index++; } } void LauncherView::ShowOverflowMenu() { #if !defined(OS_MACOSX) - std::vector<aura::Window*> windows; - GetOverflowWindows(&windows); - if (windows.empty()) + ShellDelegate* delegate = Shell::GetInstance()->delegate(); + if (!delegate) + return; + + std::vector<LauncherItem> items; + GetOverflowItems(&items); + if (items.empty()) return; MenuDelegateImpl menu_delegate; ui::SimpleMenuModel menu_model(&menu_delegate); - for (size_t i = 0; i < windows.size(); ++i) - menu_model.AddItem(static_cast<int>(i), windows[i]->title()); + for (size_t i = 0; i < items.size(); ++i) { + menu_model.AddItem(static_cast<int>(i), + delegate->GetLauncherItemTitle(items[i])); + } views::MenuModelAdapter menu_adapter(&menu_model); overflow_menu_runner_.reset(new views::MenuRunner(menu_adapter.CreateMenu())); gfx::Rect bounds(overflow_button_->size()); @@ -433,13 +441,10 @@ void LauncherView::ShowOverflowMenu() { menu_delegate.activated_command_id() == -1) return; - aura::Window* activated_window = - windows[menu_delegate.activated_command_id()]; - LauncherItems::const_iterator window_iter = - model_->ItemByWindow(activated_window); + LauncherID activated_id = items[menu_delegate.activated_command_id()].id; + LauncherItems::const_iterator window_iter = model_->ItemByID(activated_id); if (window_iter == model_->items().end()) return; // Window was deleted while menu was up. - ShellDelegate* delegate = Shell::GetInstance()->delegate(); if (!delegate) return; delegate->LauncherItemClicked(*window_iter); @@ -517,22 +522,44 @@ void LauncherView::LauncherItemRemoved(int model_index) { view, new FadeOutAnimationDelegate(this, view), true); } -void LauncherView::LauncherItemChanged(int model_index) { +void LauncherView::LauncherItemChanged(int model_index, + const ash::LauncherItem& old_item) { const LauncherItem& item(model_->items()[model_index]); + if (old_item.type != item.type) { + // Type changed, swap the views. + scoped_ptr<views::View> old_view(view_model_->view_at(model_index)); + bounds_animator_->StopAnimatingView(old_view.get()); + CancelDrag(old_view.get()); + view_model_->Remove(model_index); + views::View* new_view = CreateViewForItem(item); + AddChildView(new_view); + view_model_->Add(new_view, model_index); + new_view->SetBoundsRect(old_view->bounds()); + return; + } + views::View* view = view_model_->view_at(model_index); - if (item.type == TYPE_TABBED) { - TabbedLauncherButton* button = static_cast<TabbedLauncherButton*>(view); - gfx::Size pref = button->GetPreferredSize(); - button->SetTabImage(item.image, item.num_tabs); - if (pref != button->GetPreferredSize()) - AnimateToIdealBounds(); - else + switch (item.type) { + case TYPE_TABBED: { + TabbedLauncherButton* button = static_cast<TabbedLauncherButton*>(view); + gfx::Size pref = button->GetPreferredSize(); + button->SetTabImage(item.image, item.num_tabs); + if (pref != button->GetPreferredSize()) + AnimateToIdealBounds(); + else + button->SchedulePaint(); + break; + } + + case TYPE_APP: { + AppLauncherButton* button = static_cast<AppLauncherButton*>(view); + button->SetAppImage(item.image); button->SchedulePaint(); - } else { - DCHECK_EQ(TYPE_APP, item.type); - AppLauncherButton* button = static_cast<AppLauncherButton*>(view); - button->SetAppImage(item.image); - button->SchedulePaint(); + break; + } + + default: + break; } } @@ -585,6 +612,9 @@ void LauncherView::MouseExitedButton(views::View* view) { void LauncherView::ButtonPressed(views::Button* sender, const views::Event& event) { + if (sender == overflow_button_) + ShowOverflowMenu(); + ShellDelegate* delegate = Shell::GetInstance()->delegate(); if (!delegate) return; |