1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file.
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef UI_WM_CORE_NESTED_ACCELERATOR_CONTROLLER_H_
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define UI_WM_CORE_NESTED_ACCELERATOR_CONTROLLER_H_
7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/callback.h"
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/message_loop/message_loop.h"
10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/wm/public/dispatcher_client.h"
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/wm/wm_export.h"
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace wm {
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class NestedAcceleratorDelegate;
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class NestedAcceleratorDispatcher;
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Creates a dispatcher which wraps another dispatcher.
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// The outer dispatcher runs first and performs ash specific handling.
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// If it does not consume the event it forwards the event to the nested
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// dispatcher.
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class WM_EXPORT NestedAcceleratorController
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    : public aura::client::DispatcherClient {
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public:
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  explicit NestedAcceleratorController(NestedAcceleratorDelegate* delegate);
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual ~NestedAcceleratorController();
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // aura::client::DispatcherClient:
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void PrepareNestedLoopClosures(
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      base::MessagePumpDispatcher* dispatcher,
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      base::Closure* run_closure,
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      base::Closure* quit_closure) OVERRIDE;
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private:
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void RunNestedMessageLoop(scoped_ptr<base::RunLoop> run_loop,
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                            scoped_ptr<NestedAcceleratorDispatcher> dispatcher);
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void QuitNestedMessageLoop(const base::Closure& quit_runloop);
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  scoped_ptr<NestedAcceleratorDispatcher> accelerator_dispatcher_;
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  scoped_ptr<NestedAcceleratorDelegate> dispatcher_delegate_;
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(NestedAcceleratorController);
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace wm
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif  // UI_WM_CORE_NESTED_ACCELERATOR_CONTROLLER_H_
48