| Index: ash/accelerators/accelerator_dispatcher_win.cc
|
| diff --git a/ash/accelerators/accelerator_dispatcher_win.cc b/ash/accelerators/accelerator_dispatcher_win.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..35005f34ad23998b3c12ff44d298bb0641a914b6
|
| --- /dev/null
|
| +++ b/ash/accelerators/accelerator_dispatcher_win.cc
|
| @@ -0,0 +1,64 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "ash/accelerators/accelerator_dispatcher.h"
|
| +
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/message_loop/message_pump_dispatcher.h"
|
| +#include "base/run_loop.h"
|
| +#include "ui/events/event.h"
|
| +
|
| +using base::MessagePumpDispatcher;
|
| +
|
| +namespace ash {
|
| +
|
| +namespace {
|
| +
|
| +bool IsKeyEvent(const MSG& msg) {
|
| + return msg.message == WM_KEYDOWN || msg.message == WM_SYSKEYDOWN ||
|
| + msg.message == WM_KEYUP || msg.message == WM_SYSKEYUP;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +class AcceleratorDispatcherWin : public AcceleratorDispatcher,
|
| + public MessagePumpDispatcher {
|
| + public:
|
| + explicit AcceleratorDispatcherWin(MessagePumpDispatcher* nested)
|
| + : nested_dispatcher_(nested) {}
|
| + virtual ~AcceleratorDispatcherWin() {}
|
| +
|
| + private:
|
| + // AcceleratorDispatcher:
|
| + virtual scoped_ptr<base::RunLoop> CreateRunLoop() OVERRIDE {
|
| + return scoped_ptr<base::RunLoop>(new base::RunLoop(this));
|
| + }
|
| +
|
| + // MessagePumpDispatcher:
|
| + virtual uint32_t Dispatch(const MSG& event) OVERRIDE {
|
| + if (IsKeyEvent(event)) {
|
| + ui::KeyEvent key_event(event, false);
|
| + if (MenuClosedForPossibleAccelerator(key_event))
|
| + return POST_DISPATCH_QUIT_LOOP;
|
| +
|
| + if (AcceleratorProcessedForKeyEvent(key_event))
|
| + return POST_DISPATCH_NONE;
|
| + }
|
| +
|
| + return nested_dispatcher_ ? nested_dispatcher_->Dispatch(event)
|
| + : POST_DISPATCH_PERFORM_DEFAULT;
|
| + }
|
| +
|
| + MessagePumpDispatcher* nested_dispatcher_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(AcceleratorDispatcherWin);
|
| +};
|
| +
|
| +scoped_ptr<AcceleratorDispatcher> AcceleratorDispatcher::Create(
|
| + MessagePumpDispatcher* nested_dispatcher) {
|
| + return scoped_ptr<AcceleratorDispatcher>(
|
| + new AcceleratorDispatcherWin(nested_dispatcher));
|
| +}
|
| +
|
| +} // namespace ash
|
|
|