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

Unified Diff: chrome/browser/ui/app_list/app_list_shower_views.cc

Issue 225053004: Refactor views app list services to allow more code sharing (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase+sim30 Created 6 years, 8 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 side-by-side diff with in-line comments
Download patch
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();
}
« no previous file with comments | « chrome/browser/ui/app_list/app_list_shower_views.h ('k') | chrome/browser/ui/app_list/app_list_shower_views_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698