123456789101112131415161718192021222324252627282930313233343536373839404142 |
- // Copyright 2019 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/aura/scoped_window_event_targeting_blocker.h"
- #include "ui/aura/window.h"
- namespace aura {
- ScopedWindowEventTargetingBlocker::ScopedWindowEventTargetingBlocker(
- Window* window)
- : window_(window) {
- if (window_->event_targeting_blocker_count_ == 0) {
- window_->restore_event_targeting_policy_ = window_->event_targeting_policy_;
- window_->SetEventTargetingPolicy(EventTargetingPolicy::kNone);
- }
- // Increase |Window::event_targeting_blocker_count_| after setting the event
- // targeting policy to kNone as Window::SetEventTargetingPolicy() relies on
- // |Window::event_targeting_blocker_count_| to see if the policy is allowed
- // to be changed.
- window_->event_targeting_blocker_count_++;
- window_->AddObserver(this);
- }
- ScopedWindowEventTargetingBlocker::~ScopedWindowEventTargetingBlocker() {
- if (!window_)
- return;
- window_->RemoveObserver(this);
- window_->event_targeting_blocker_count_--;
- DCHECK_GE(window_->event_targeting_blocker_count_, 0);
- if (window_->event_targeting_blocker_count_ == 0)
- window_->SetEventTargetingPolicy(window_->restore_event_targeting_policy_);
- }
- void ScopedWindowEventTargetingBlocker::OnWindowDestroying(Window* window) {
- DCHECK_EQ(window, window_);
- window_->RemoveObserver(this);
- window_ = nullptr;
- }
- } // namespace aura
|