Chromium Code Reviews| Index: chrome/browser/ui/views/app_list/app_list_controller_win.cc |
| diff --git a/chrome/browser/ui/views/app_list/app_list_controller_win.cc b/chrome/browser/ui/views/app_list/app_list_controller_win.cc |
| index 6028f1a45a5289b510bca59af70fd4edf318644e..223739b3495bffcd7063f85f14f8400ed2daed81 100644 |
| --- a/chrome/browser/ui/views/app_list/app_list_controller_win.cc |
| +++ b/chrome/browser/ui/views/app_list/app_list_controller_win.cc |
| @@ -25,6 +25,7 @@ |
| #include "chrome/browser/extensions/extension_system.h" |
| #include "chrome/browser/lifetime/application_lifetime.h" |
| #include "chrome/browser/platform_util.h" |
| +#include "chrome/browser/profiles/avatar_menu_model.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/profiles/profile_manager.h" |
| #include "chrome/browser/shell_integration.h" |
| @@ -50,6 +51,7 @@ |
| #include "grit/chromium_strings.h" |
| #include "grit/generated_resources.h" |
| #include "grit/google_chrome_strings.h" |
| +#include "ui/app_list/app_list_model.h" |
| #include "ui/app_list/pagination_model.h" |
| #include "ui/app_list/views/app_list_view.h" |
| #include "ui/base/l10n/l10n_util.h" |
| @@ -268,6 +270,7 @@ class AppListControllerDelegateWin : public AppListControllerDelegate { |
| virtual void LaunchApp(Profile* profile, |
| const extensions::Extension* extension, |
| int event_flags) OVERRIDE; |
| + virtual void ShowForProfileAtIndex(size_t index) OVERRIDE; |
| DISALLOW_COPY_AND_ASSIGN(AppListControllerDelegateWin); |
| }; |
| @@ -425,6 +428,10 @@ bool AppListControllerDelegateWin::CanPin() { |
| return false; |
| } |
| +void AppListControllerDelegateWin::ShowForProfileAtIndex(size_t index) { |
| + AppListController::GetInstance()->ShowForProfileAtIndex(index); |
| +} |
| + |
| void AppListControllerDelegateWin::OnShowExtensionPrompt() { |
| AppListController::GetInstance()->set_can_close(false); |
| } |
| @@ -531,13 +538,27 @@ void AppListController::ShowForProfile(Profile* requested_profile) { |
| SetProfilePath(requested_profile->GetPath()); |
| - DismissAppList(); |
| - PopulateViewFromProfile(requested_profile); |
| + // If the current view and delegate exist, switch the delegate's profile and |
| + // rebuild the model. |
| + if (current_view_ && view_delegate_) { |
|
koz (OOO until 15th September)
2013/07/31 03:01:42
current_view_ being not NULL implies view_delegate
calamity
2013/08/01 08:35:45
Done.
|
| + if (requested_profile != profile()) { |
| + SetProfile(requested_profile); |
| + view_delegate_->SetProfile(requested_profile); |
| + current_view_->SetModel(new app_list::AppListModel()); |
| + } |
| + } else { |
| + PopulateViewFromProfile(requested_profile); |
| + } |
| + |
| + // If the app list isn't visible, move the app list to the cursor position |
| + // before showing it. |
| + if (!IsAppListVisible()) { |
| + gfx::Point cursor = gfx::Screen::GetNativeScreen()->GetCursorScreenPoint(); |
| + UpdateArrowPositionAndAnchorPoint(cursor); |
| + } |
| DCHECK(current_view_); |
| EnsureHaveKeepAliveForView(); |
| - gfx::Point cursor = gfx::Screen::GetNativeScreen()->GetCursorScreenPoint(); |
| - UpdateArrowPositionAndAnchorPoint(cursor); |
| current_view_->GetWidget()->Show(); |
| current_view_->GetWidget()->GetTopLevelWidget()->UpdateWindowIcon(); |
| current_view_->GetWidget()->Activate(); |
| @@ -560,8 +581,9 @@ void AppListController::PopulateViewFromProfile(Profile* requested_profile) { |
| // The controller will be owned by the view delegate, and the delegate is |
| // owned by the app list view. The app list view manages it's own lifetime. |
| - view_delegate_ = new AppListViewDelegate(CreateControllerDelegate(), |
| - profile()); |
| + view_delegate_ = new AppListViewDelegate( |
| + CreateControllerDelegate(), |
| + profile()); |
| current_view_ = new app_list::AppListView(view_delegate_); |
| gfx::Point cursor = gfx::Screen::GetNativeScreen()->GetCursorScreenPoint(); |
| current_view_->InitAsBubble(NULL, |