// Copyright 2015 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_SCOPED_TARGET_HANDLER_H_ #define UI_EVENTS_SCOPED_TARGET_HANDLER_H_ #include "base/macros.h" #include "ui/events/event_handler.h" #include "ui/events/events_export.h" namespace ui { class EventTarget; // An EventHandler that replaces an EventTarget's target handler with itself to // pass events first to the original handler and second to an additional new // EventHandler. The new handler gets called after the original handler even // if it calls SetHandled() or StopPropagation() on the event. class EVENTS_EXPORT ScopedTargetHandler : public EventHandler { public: ScopedTargetHandler(EventTarget* target, EventHandler* new_handler); ~ScopedTargetHandler() override; // EventHandler: void OnEvent(Event* event) override; private: // If non-null the destructor sets this to true. This is set while handling // an event and used to detect if |this| has been deleted. bool* destroyed_flag_; // An EventTarget that has its target handler replaced with |this| for a life // time of |this|. EventTarget* target_; // An EventHandler that gets restored on |view_| when |this| is destroyed. EventHandler* original_handler_; // A new handler that gets events in addition to the |original_handler_|. EventHandler* new_handler_; DISALLOW_COPY_AND_ASSIGN(ScopedTargetHandler); }; } // namespace ui #endif // UI_EVENTsS_SCOPED_TARGET_HANDLER_H_