// 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. #include "ui/events/scoped_target_handler.h" #include "ui/events/event.h" #include "ui/events/event_handler.h" #include "ui/events/event_target.h" namespace ui { ScopedTargetHandler::ScopedTargetHandler(EventTarget* target, EventHandler* handler) : destroyed_flag_(NULL), target_(target), new_handler_(handler) { original_handler_ = target_->SetTargetHandler(this); } ScopedTargetHandler::~ScopedTargetHandler() { EventHandler* handler = target_->SetTargetHandler(original_handler_); DCHECK_EQ(this, handler); if (destroyed_flag_) *destroyed_flag_ = true; } void ScopedTargetHandler::OnEvent(Event* event) { if (original_handler_) { bool destroyed = false; bool* old_destroyed_flag = destroyed_flag_; destroyed_flag_ = &destroyed; original_handler_->OnEvent(event); if (destroyed) { if (old_destroyed_flag) *old_destroyed_flag = true; return; } destroyed_flag_ = old_destroyed_flag; } new_handler_->OnEvent(event); } } // namespace ui