diff options
Diffstat (limited to 'chromium/ui/events/platform/scoped_event_dispatcher.h')
-rw-r--r-- | chromium/ui/events/platform/scoped_event_dispatcher.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/chromium/ui/events/platform/scoped_event_dispatcher.h b/chromium/ui/events/platform/scoped_event_dispatcher.h new file mode 100644 index 00000000000..a2f52945d91 --- /dev/null +++ b/chromium/ui/events/platform/scoped_event_dispatcher.h @@ -0,0 +1,40 @@ +// 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. + +#ifndef UI_EVENTS_PLATFORM_SCOPED_EVENT_DISPATCHER_H_ +#define UI_EVENTS_PLATFORM_SCOPED_EVENT_DISPATCHER_H_ + +#include "base/auto_reset.h" +#include "base/basictypes.h" +#include "ui/events/events_export.h" + +namespace ui { + +class PlatformEventDispatcher; + +// A temporary PlatformEventDispatcher can be installed on a +// PlatformEventSource that overrides all installed event dispatchers, and +// always gets a chance to dispatch the event first. The PlatformEventSource +// returns a ScopedEventDispatcher object in such cases. This +// ScopedEventDispatcher object can be used to dispatch the event to any +// previous overridden dispatcher. When this object is destroyed, it removes the +// override-dispatcher, and restores the previous override-dispatcher. +class EVENTS_EXPORT ScopedEventDispatcher { + public: + ScopedEventDispatcher(PlatformEventDispatcher** scoped_dispatcher, + PlatformEventDispatcher* new_dispatcher); + ~ScopedEventDispatcher(); + + operator PlatformEventDispatcher*() const { return original_; } + + private: + PlatformEventDispatcher* original_; + base::AutoReset<PlatformEventDispatcher*> restore_; + + DISALLOW_COPY_AND_ASSIGN(ScopedEventDispatcher); +}; + +} // namespace ui + +#endif // UI_EVENTS_PLATFORM_SCOPED_EVENT_DISPATCHER_H_ |