123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- // 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)
- : target_(target), new_handler_(handler) {
- original_handler_ = target_->SetTargetHandler(this);
- }
- ScopedTargetHandler::~ScopedTargetHandler() {
- EventHandler* handler = target_->SetTargetHandler(original_handler_);
- DCHECK_EQ(this, handler);
- }
- void ScopedTargetHandler::OnEvent(Event* event) {
- if (original_handler_) {
- auto weak_this = weak_factory_.GetWeakPtr();
- original_handler_->OnEvent(event);
- if (!weak_this)
- return;
- }
- // This check is needed due to nested event loops when starting DragDrop.
- if (event->stopped_propagation())
- return;
- new_handler_->OnEvent(event);
- }
- base::StringPiece ScopedTargetHandler::GetLogContext() const {
- return "ScopedTargetHandler";
- }
- } // namespace ui
|