1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// found in the LICENSE file. 4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#ifndef UI_EVENTS_PLATFORM_SCOPED_EVENT_DISPATCHER_H_ 6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define UI_EVENTS_PLATFORM_SCOPED_EVENT_DISPATCHER_H_ 7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/auto_reset.h" 9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/basictypes.h" 10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/events/events_export.h" 11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace ui { 13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass PlatformEventDispatcher; 15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// A temporary PlatformEventDispatcher can be installed on a 17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// PlatformEventSource that overrides all installed event dispatchers, and 18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// always gets a chance to dispatch the event first. The PlatformEventSource 19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// returns a ScopedEventDispatcher object in such cases. This 20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// ScopedEventDispatcher object can be used to dispatch the event to any 21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// previous overridden dispatcher. When this object is destroyed, it removes the 22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// override-dispatcher, and restores the previous override-dispatcher. 23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass EVENTS_EXPORT ScopedEventDispatcher { 24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public: 25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ScopedEventDispatcher(PlatformEventDispatcher** scoped_dispatcher, 26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PlatformEventDispatcher* new_dispatcher); 27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ~ScopedEventDispatcher(); 28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch operator PlatformEventDispatcher*() const { return original_; } 30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private: 32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PlatformEventDispatcher* original_; 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::AutoReset<PlatformEventDispatcher*> restore_; 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DISALLOW_COPY_AND_ASSIGN(ScopedEventDispatcher); 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace ui 39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif // UI_EVENTS_PLATFORM_SCOPED_EVENT_DISPATCHER_H_ 41