1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef UI_EVENTS_PLATFORM_PLATFORM_EVENT_DISPATCHER_H_
6#define UI_EVENTS_PLATFORM_PLATFORM_EVENT_DISPATCHER_H_
7
8#include "base/basictypes.h"
9#include "ui/events/events_export.h"
10#include "ui/events/platform/platform_event_types.h"
11
12namespace ui {
13
14// See documentation for |PlatformEventDispatcher::DispatchEvent()| for
15// explanation of the meaning of the flags.
16enum PostDispatchAction {
17  POST_DISPATCH_NONE = 0x0,
18  POST_DISPATCH_PERFORM_DEFAULT = 0x1,
19  POST_DISPATCH_STOP_PROPAGATION = 0x2,
20};
21
22// PlatformEventDispatcher receives events from a PlatformEventSource and
23// dispatches them.
24class EVENTS_EXPORT PlatformEventDispatcher {
25 public:
26  // Returns whether this dispatcher wants to dispatch |event|.
27  virtual bool CanDispatchEvent(const PlatformEvent& event) = 0;
28
29  // Dispatches |event|. If this is not the default dispatcher, then the
30  // dispatcher can request that the default dispatcher gets a chance to
31  // dispatch the event by setting POST_DISPATCH_PERFORM_DEFAULT to the return
32  // value. If the dispatcher has processed the event, and no other dispatcher
33  // should be allowed to dispatch the event, then the dispatcher should set
34  // POST_DISPATCH_STOP_PROPAGATION flag on the return value.
35  virtual uint32_t DispatchEvent(const PlatformEvent& event) = 0;
36
37 protected:
38  virtual ~PlatformEventDispatcher() {}
39};
40
41}  // namespace ui
42
43#endif  // UI_EVENTS_PLATFORM_PLATFORM_EVENT_DISPATCHER_H_
44