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

Unified Diff: ash/shell.cc

Issue 10134036: Let Chrome app handle Ash accelerators first if the app is launched as a window (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix tests Created 8 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: ash/shell.cc
diff --git a/ash/shell.cc b/ash/shell.cc
index 36391fdde992dfff2d6a42ac65333d1b76508757..8f33f6a13022c311d2f50aafb82b505970d520f1 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -6,6 +6,7 @@
#include <algorithm>
+#include "ash/accelerators/accelerator_table.h"
#include "ash/app_list/app_list.h"
#include "ash/ash_switches.h"
#include "ash/desktop_background/desktop_background_controller.h"
@@ -70,12 +71,14 @@
#include "ui/aura/root_window.h"
#include "ui/aura/ui_controls_aura.h"
#include "ui/aura/window.h"
+#include "ui/base/accelerators/accelerator_manager.h"
#include "ui/gfx/compositor/layer.h"
#include "ui/gfx/compositor/layer_animator.h"
#include "ui/gfx/monitor.h"
#include "ui/gfx/screen.h"
#include "ui/gfx/size.h"
#include "ui/ui_controls/ui_controls.h"
+#include "ui/views/focus/focus_manager_factory.h"
#include "ui/views/widget/native_widget_aura.h"
#include "ui/views/widget/widget.h"
@@ -498,6 +501,37 @@ class DummySystemTrayDelegate : public SystemTrayDelegate {
DISALLOW_COPY_AND_ASSIGN(DummySystemTrayDelegate);
};
+class AshFocusManagerFactory : public views::FocusManagerFactory {
+ public:
+ AshFocusManagerFactory() {}
+ virtual ~AshFocusManagerFactory() {}
+
+ protected:
+ virtual views::FocusManager* CreateFocusManager(Widget* widget) OVERRIDE {
+ views::FocusManager* manager = new views::FocusManager(widget);
+#if !defined(OS_MACOSX)
Ben Goodger (Google) 2012/05/04 16:25:33 why the OS_MACOSX?
Yusuke Sato 2012/05/07 08:27:28 Because accelerator_controller() is currently not
+ AcceleratorController* target =
+ Shell::GetInstance()->accelerator_controller();
+ DCHECK(target);
+ for (size_t i = 0; i < kAcceleratorDataLength; ++i) {
+ ui::Accelerator accelerator(kAcceleratorData[i].keycode,
+ kAcceleratorData[i].shift,
+ kAcceleratorData[i].ctrl,
+ kAcceleratorData[i].alt);
+ accelerator.set_type(kAcceleratorData[i].trigger_on_press ?
+ ui::ET_KEY_PRESSED : ui::ET_KEY_RELEASED);
+ manager->RegisterAccelerator(accelerator,
+ ui::AcceleratorManager::kNormalPriority,
+ target);
Ben Goodger (Google) 2012/05/04 16:25:33 This injection makes me a little scared. Is there
Yusuke Sato 2012/05/07 08:27:28 Done. On 2012/05/04 16:25:33, Ben Goodger (Google
+ }
+#endif
+ return manager;
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(AshFocusManagerFactory);
+};
+
} // namespace
// static
@@ -543,6 +577,8 @@ Shell::Shell(ShellDelegate* delegate)
}
Shell::~Shell() {
+ views::FocusManagerFactory::Install(NULL);
+
RemoveRootWindowEventFilter(key_rewriter_filter_.get());
RemoveRootWindowEventFilter(partial_screenshot_filter_.get());
RemoveRootWindowEventFilter(input_method_filter_.get());
@@ -741,6 +777,8 @@ void Shell::Init() {
window_cycle_controller_.reset(new WindowCycleController);
monitor_controller_.reset(new internal::MonitorController);
screen_dimmer_.reset(new internal::ScreenDimmer);
+
+ views::FocusManagerFactory::Install(new AshFocusManagerFactory);
}
aura::Window* Shell::GetContainer(int container_id) {

Powered by Google App Engine
This is Rietveld 408576698