| 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 9979a33730363690a81443d20e5c3b83bd8ac55d..c08f4f2764f74560d50731c21be99c68c15792bc 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
|
| @@ -50,6 +50,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"
|
| @@ -372,6 +373,8 @@ class AppListControllerDelegateWin : public AppListControllerDelegate {
|
| virtual void LaunchApp(Profile* profile,
|
| const extensions::Extension* extension,
|
| int event_flags) OVERRIDE;
|
| + virtual void ShowForProfileByPath(
|
| + const base::FilePath& profile_path) OVERRIDE;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(AppListControllerDelegateWin);
|
| };
|
| @@ -609,6 +612,10 @@ class AppListViewWin {
|
| view_->OnSigninStatusChanged();
|
| }
|
|
|
| + void SetProfileByPath(const base::FilePath profile_path) {
|
| + view_->SetProfileByPath(profile_path);
|
| + }
|
| +
|
| private:
|
| void UpdateArrowPositionAndAnchorPoint(const gfx::Point& cursor) {
|
| gfx::Screen* screen =
|
| @@ -685,13 +692,26 @@ class AppListShower {
|
| return;
|
| }
|
|
|
| - DismissAppList();
|
| - CreateViewForProfile(requested_profile);
|
| + // If the current view exists, switch the delegate's profile and rebuild the
|
| + // model.
|
| + if (!view_) {
|
| + CreateViewForProfile(requested_profile);
|
| + } else if (requested_profile != profile_) {
|
| + profile_ = requested_profile;
|
| + view_->SetProfileByPath(requested_profile->GetPath());
|
| + }
|
|
|
| DCHECK(view_);
|
| EnsureHaveKeepAliveForView();
|
| - gfx::Point cursor = gfx::Screen::GetNativeScreen()->GetCursorScreenPoint();
|
| - view_->ShowNearCursor(cursor);
|
| + // 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();
|
| + view_->ShowNearCursor(cursor);
|
| + } else {
|
| + view_->Show();
|
| + }
|
| }
|
|
|
| gfx::NativeWindow GetWindow() {
|
| @@ -881,6 +901,13 @@ bool AppListControllerDelegateWin::CanPin() {
|
| return false;
|
| }
|
|
|
| +void AppListControllerDelegateWin::ShowForProfileByPath(
|
| + const base::FilePath& profile_path) {
|
| + AppListService* service = AppListController::GetInstance();
|
| + service->SetProfilePath(profile_path);
|
| + service->Show();
|
| +}
|
| +
|
| void AppListControllerDelegateWin::OnShowExtensionPrompt() {
|
| AppListController::GetInstance()->set_can_close(false);
|
| }
|
| @@ -980,7 +1007,6 @@ void AppListController::ShowForProfile(Profile* requested_profile) {
|
| RecordAppListLaunch();
|
| }
|
|
|
| -
|
| void AppListController::DismissAppList() {
|
| shower_->DismissAppList();
|
| }
|
|
|