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