| Index: chrome/browser/ui/app_list/app_list_shower_views.cc
|
| diff --git a/chrome/browser/ui/app_list/app_list_shower.cc b/chrome/browser/ui/app_list/app_list_shower_views.cc
|
| similarity index 53%
|
| rename from chrome/browser/ui/app_list/app_list_shower.cc
|
| rename to chrome/browser/ui/app_list/app_list_shower_views.cc
|
| index d657c7c2bc906fc5ddb9aa6a5461d0a359db6c3c..de3ddb6bf5a969353368d8adaea4cb65f3d0701a 100644
|
| --- a/chrome/browser/ui/app_list/app_list_shower.cc
|
| +++ b/chrome/browser/ui/app_list/app_list_shower_views.cc
|
| @@ -2,17 +2,23 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include "chrome/browser/ui/app_list/app_list_shower_views.h"
|
| +
|
| #include "base/bind.h"
|
| #include "base/message_loop/message_loop.h"
|
| -#include "chrome/browser/ui/app_list/app_list_shower.h"
|
| +#include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/ui/app_list/app_list_shower_delegate.h"
|
| +#include "chrome/browser/ui/app_list/app_list_view_delegate.h"
|
| #include "chrome/browser/ui/app_list/scoped_keep_alive.h"
|
| +#include "ui/app_list/views/app_list_view.h"
|
| +#include "ui/gfx/geometry/point.h"
|
| +#include "ui/gfx/screen.h"
|
|
|
| -AppListShower::AppListShower(scoped_ptr<AppListFactory> factory,
|
| - AppListService* service)
|
| - : factory_(factory.Pass()),
|
| - service_(service),
|
| +AppListShower::AppListShower(AppListShowerDelegate* delegate)
|
| + : delegate_(delegate),
|
| profile_(NULL),
|
| - can_close_app_list_(true) {
|
| + app_list_(NULL),
|
| + window_icon_updated_(false) {
|
| }
|
|
|
| AppListShower::~AppListShower() {
|
| @@ -22,48 +28,46 @@ void AppListShower::ShowForProfile(Profile* requested_profile) {
|
| // If the app list is already displaying |profile| just activate it (in case
|
| // we have lost focus).
|
| if (IsAppListVisible() && (requested_profile == profile_)) {
|
| - app_list_->Show();
|
| + Show();
|
| return;
|
| }
|
|
|
| - if (!app_list_) {
|
| + if (!HasView()) {
|
| CreateViewForProfile(requested_profile);
|
| } else if (requested_profile != profile_) {
|
| profile_ = requested_profile;
|
| - app_list_->SetProfile(requested_profile);
|
| + UpdateViewForNewProfile();
|
| }
|
|
|
| keep_alive_.reset(new ScopedKeepAlive);
|
| if (!IsAppListVisible())
|
| - app_list_->MoveNearCursor();
|
| - app_list_->Show();
|
| + delegate_->MoveNearCursor(app_list_);
|
| + Show();
|
| }
|
|
|
| gfx::NativeWindow AppListShower::GetWindow() {
|
| if (!IsAppListVisible())
|
| return NULL;
|
| - return app_list_->GetWindow();
|
| + return app_list_->GetWidget()->GetNativeWindow();
|
| }
|
|
|
| void AppListShower::CreateViewForProfile(Profile* requested_profile) {
|
| profile_ = requested_profile;
|
| - app_list_.reset(factory_->CreateAppList(
|
| - profile_,
|
| - service_,
|
| - base::Bind(&AppListShower::DismissAppList, base::Unretained(this))));
|
| + app_list_ = MakeViewForCurrentProfile();
|
| + delegate_->OnViewCreated();
|
| }
|
|
|
| void AppListShower::DismissAppList() {
|
| - if (app_list_ && can_close_app_list_) {
|
| - app_list_->Hide();
|
| + if (HasView()) {
|
| + Hide();
|
| + delegate_->OnViewDismissed();
|
| keep_alive_.reset();
|
| }
|
| }
|
|
|
| void AppListShower::HandleViewBeingDestroyed() {
|
| - app_list_.reset();
|
| + app_list_ = NULL;
|
| profile_ = NULL;
|
| - can_close_app_list_ = true;
|
|
|
| // We may end up here as the result of the OS deleting the AppList's
|
| // widget (WidgetObserver::OnWidgetDestroyed). If this happens and there
|
| @@ -84,7 +88,7 @@ void AppListShower::HandleViewBeingDestroyed() {
|
| }
|
|
|
| bool AppListShower::IsAppListVisible() const {
|
| - return app_list_ && app_list_->IsVisible();
|
| + return app_list_ && app_list_->GetWidget()->IsVisible();
|
| }
|
|
|
| void AppListShower::WarmupForProfile(Profile* profile) {
|
| @@ -97,6 +101,38 @@ bool AppListShower::HasView() const {
|
| return !!app_list_;
|
| }
|
|
|
| +app_list::AppListView* AppListShower::MakeViewForCurrentProfile() {
|
| + // The view delegate will be owned by the app list view. The app list view
|
| + // manages its own lifetime.
|
| + AppListViewDelegate* view_delegate = new AppListViewDelegate(
|
| + profile_, delegate_->GetControllerDelegateForCreate());
|
| + app_list::AppListView* view = new app_list::AppListView(view_delegate);
|
| + gfx::Point cursor = gfx::Screen::GetNativeScreen()->GetCursorScreenPoint();
|
| + view->InitAsBubbleAtFixedLocation(NULL,
|
| + &pagination_model_,
|
| + cursor,
|
| + views::BubbleBorder::FLOAT,
|
| + false /* border_accepts_events */);
|
| + return view;
|
| +}
|
| +
|
| +void AppListShower::UpdateViewForNewProfile() {
|
| + app_list_->SetProfileByPath(profile_->GetPath());
|
| +}
|
| +
|
| +void AppListShower::Show() {
|
| + app_list_->GetWidget()->Show();
|
| + if (!window_icon_updated_) {
|
| + app_list_->GetWidget()->GetTopLevelWidget()->UpdateWindowIcon();
|
| + window_icon_updated_ = true;
|
| + }
|
| + app_list_->GetWidget()->Activate();
|
| +}
|
| +
|
| +void AppListShower::Hide() {
|
| + app_list_->GetWidget()->Hide();
|
| +}
|
| +
|
| void AppListShower::ResetKeepAlive() {
|
| keep_alive_.reset();
|
| }
|
|
|