Index: chrome/browser/ui/views/aura/app_list_window.cc |
diff --git a/chrome/browser/ui/views/aura/app_list_window.cc b/chrome/browser/ui/views/aura/app_list_window.cc |
index f0aef7ab09ccb0dd38d4bfdc47b956c8956feb68..c14c464fc98c80c2e8652de02814314b38c774b3 100644 |
--- a/chrome/browser/ui/views/aura/app_list_window.cc |
+++ b/chrome/browser/ui/views/aura/app_list_window.cc |
@@ -9,14 +9,17 @@ |
#include "chrome/common/url_constants.h" |
#include "content/browser/renderer_host/render_view_host.h" |
#include "content/browser/renderer_host/render_widget_host_view.h" |
+#include "ui/aura_shell/shell.h" |
#include "ui/views/widget/widget.h" |
-AppListWindow::AppListWindow( |
+AppListWindow::AppListWindow(const gfx::Rect& bounds, |
const aura_shell::ShellDelegate::SetWidgetCallback& callback) |
: widget_(NULL), |
contents_(NULL), |
- callback_(callback) { |
- Init(); |
+ callback_(callback), |
+ content_rendered_(false), |
+ apps_loaded_(false) { |
+ Init(bounds); |
} |
AppListWindow::~AppListWindow() { |
@@ -26,7 +29,7 @@ void AppListWindow::DeleteDelegate() { |
delete this; |
} |
-views::View* AppListWindow::GetContentsView() { |
+views::View* AppListWindow::GetInitiallyFocusedView() { |
return contents_; |
} |
@@ -38,6 +41,30 @@ const views::Widget* AppListWindow::GetWidget() const { |
return widget_; |
} |
+bool AppListWindow::HandleContextMenu(const ContextMenuParams& params) { |
+ // Do not show the context menu for non-debug build. |
+#ifndef NDEBUG |
sky
2011/11/30 21:50:21
#if !defined(NDEBUG)
xiyuan
2011/11/30 22:26:34
Done.
|
+ return false; |
+#else |
+ return true; |
+#endif |
+} |
+ |
+void AppListWindow::HandleKeyboardEvent(const NativeWebKeyboardEvent& event) { |
+ if (event.windowsKeyCode == 27) // ESC |
sky
2011/11/30 21:50:21
Isn't there a constant you can match against?
xiyuan
2011/11/30 22:26:34
Done. :p
|
+ Close(); |
+} |
+ |
+bool AppListWindow::TakeFocus(bool reverse) { |
+ // Forward the focus back to web contents. |
+ contents_->dom_contents()->tab_contents()->FocusThroughTabTraversal(reverse); |
+ return true; |
+} |
+ |
+bool AppListWindow::IsPopupOrPanel(const TabContents* source) const { |
+ return true; |
+} |
+ |
void AppListWindow::OnRenderHostCreated(RenderViewHost* host) { |
} |
@@ -45,10 +72,21 @@ void AppListWindow::OnTabMainFrameLoaded() { |
} |
void AppListWindow::OnTabMainFrameFirstRender() { |
- callback_.Run(widget_); |
+ content_rendered_ = true; |
+ SetWidgetIfReady(); |
+} |
+ |
+void AppListWindow::Close() { |
+ // We should be visible when running here and toggle actually closes us. |
+ aura_shell::Shell::GetInstance()->ToggleAppList(); |
} |
-void AppListWindow::Init() { |
+void AppListWindow::OnAppsLoaded() { |
+ apps_loaded_ = true; |
+ SetWidgetIfReady(); |
+} |
+ |
+void AppListWindow::Init(const gfx::Rect& bounds) { |
DCHECK(!widget_ && !contents_); |
contents_ = new DOMView(); |
@@ -56,8 +94,10 @@ void AppListWindow::Init() { |
TabContents* tab = contents_->dom_contents()->tab_contents(); |
tab_watcher_.reset(new TabFirstRenderWatcher(tab, this)); |
+ tab->set_delegate(this); |
contents_->LoadURL(GURL(chrome::kChromeUIAppListURL)); |
+ static_cast<AppListUI*>(tab->web_ui())->set_delegate(this); |
// Use a background with transparency to trigger transparent webkit. |
SkBitmap background; |
@@ -70,10 +110,7 @@ void AppListWindow::Init() { |
views::Widget::InitParams widget_params( |
views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); |
- // A non-empty bounds so that we get rendered notification. Make the size |
- // close the final size so that card slider resize handler does no generate |
- // unexpected animation. |
- widget_params.bounds = gfx::Rect(0, 0, 900, 700); |
+ widget_params.bounds = bounds; |
widget_params.delegate = this; |
widget_params.keep_on_top = true; |
widget_params.transparent = true; |
@@ -82,3 +119,8 @@ void AppListWindow::Init() { |
widget_->Init(widget_params); |
widget_->SetContentsView(contents_); |
} |
+ |
+void AppListWindow::SetWidgetIfReady() { |
+ if (content_rendered_ && apps_loaded_) |
+ callback_.Run(widget_); |
+} |