Index: ash/common/wm_shell.cc |
diff --git a/ash/common/wm_shell.cc b/ash/common/wm_shell.cc |
index 9af808d98e79e5aa93628501062be7e98a6d8ad1..53e4559bfe52d1390caf789b1a75af518c27eae8 100644 |
--- a/ash/common/wm_shell.cc |
+++ b/ash/common/wm_shell.cc |
@@ -7,6 +7,7 @@ |
#include <utility> |
#include "ash/common/accelerators/accelerator_controller.h" |
+#include "ash/common/accelerators/ash_focus_manager_factory.h" |
#include "ash/common/accessibility_delegate.h" |
#include "ash/common/focus_cycler.h" |
#include "ash/common/keyboard/keyboard_ui.h" |
@@ -30,6 +31,7 @@ |
#include "base/logging.h" |
#include "ui/app_list/presenter/app_list_presenter.h" |
#include "ui/display/display.h" |
+#include "ui/views/focus/focus_manager_factory.h" |
#if defined(OS_CHROMEOS) |
#include "ash/common/system/chromeos/brightness/brightness_controller_chromeos.h" |
@@ -61,6 +63,10 @@ void WmShell::Initialize() { |
// Create the app list item in the shelf data model. |
AppListShelfItemDelegate::CreateAppListItemAndDelegate(shelf_model_.get()); |
+ |
+ // Install the custom factory early on so that views::FocusManagers for Tray, |
+ // Shelf, and WallPaper could be created by the factory. |
+ views::FocusManagerFactory::Install(new AshFocusManagerFactory); |
} |
void WmShell::Shutdown() { |
@@ -71,6 +77,9 @@ void WmShell::Shutdown() { |
shelf_model_->DestroyItemDelegates(); |
// Must be destroyed before FocusClient. |
shelf_delegate_.reset(); |
+ |
+ // Balances the Install() in Initialize(). |
+ views::FocusManagerFactory::Install(nullptr); |
} |
void WmShell::OnMaximizeModeStarted() { |