Index: ui/views/corewm/window_modality_controller.cc |
diff --git a/ui/views/corewm/window_modality_controller.cc b/ui/views/corewm/window_modality_controller.cc |
deleted file mode 100644 |
index 68273fdad71892a2e0606f891d280cc0961a4012..0000000000000000000000000000000000000000 |
--- a/ui/views/corewm/window_modality_controller.cc |
+++ /dev/null |
@@ -1,196 +0,0 @@ |
-// Copyright (c) 2012 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/views/corewm/window_modality_controller.h" |
- |
-#include <algorithm> |
- |
-#include "ui/aura/client/aura_constants.h" |
-#include "ui/aura/client/capture_client.h" |
-#include "ui/aura/env.h" |
-#include "ui/aura/window.h" |
-#include "ui/aura/window_event_dispatcher.h" |
-#include "ui/aura/window_property.h" |
-#include "ui/base/ui_base_types.h" |
-#include "ui/events/event.h" |
-#include "ui/events/event_target.h" |
-#include "ui/events/gestures/gesture_recognizer.h" |
-#include "ui/views/corewm/window_animations.h" |
-#include "ui/views/corewm/window_util.h" |
- |
-namespace views { |
-namespace corewm { |
- |
-// Transient child's modal parent. |
-extern const aura::WindowProperty<aura::Window*>* const kModalParentKey; |
-DEFINE_WINDOW_PROPERTY_KEY(aura::Window*, kModalParentKey, NULL); |
- |
-namespace { |
- |
-bool HasAncestor(aura::Window* window, aura::Window* ancestor) { |
- if (!window) |
- return false; |
- if (window == ancestor) |
- return true; |
- return HasAncestor(window->parent(), ancestor); |
-} |
- |
-bool TransientChildIsWindowModal(aura::Window* window) { |
- return window->GetProperty(aura::client::kModalKey) == ui::MODAL_TYPE_WINDOW; |
-} |
- |
-bool TransientChildIsSystemModal(aura::Window* window) { |
- return window->GetProperty(aura::client::kModalKey) == ui::MODAL_TYPE_SYSTEM; |
-} |
- |
-bool TransientChildIsChildModal(aura::Window* window) { |
- return window->GetProperty(aura::client::kModalKey) == ui::MODAL_TYPE_CHILD; |
-} |
- |
-aura::Window* GetModalParent(aura::Window* window) { |
- return window->GetProperty(kModalParentKey); |
-} |
- |
-bool IsModalTransientChild(aura::Window* transient, aura::Window* original) { |
- return transient->IsVisible() && |
- (TransientChildIsWindowModal(transient) || |
- TransientChildIsSystemModal(transient) || |
- (TransientChildIsChildModal(transient) && |
- (HasAncestor(original, GetModalParent(transient))))); |
-} |
- |
-aura::Window* GetModalTransientChild( |
- aura::Window* activatable, |
- aura::Window* original) { |
- for (aura::Window::Windows::const_iterator it = |
- GetTransientChildren(activatable).begin(); |
- it != GetTransientChildren(activatable).end(); |
- ++it) { |
- aura::Window* transient = *it; |
- if (IsModalTransientChild(transient, original)) { |
- return GetTransientChildren(transient).empty() ? |
- transient : GetModalTransientChild(transient, original); |
- } |
- } |
- return NULL; |
-} |
- |
-} // namespace |
- |
-void SetModalParent(aura::Window* child, aura::Window* parent) { |
- child->SetProperty(kModalParentKey, parent); |
-} |
- |
-aura::Window* GetModalTransient(aura::Window* window) { |
- if (!window) |
- return NULL; |
- |
- // We always want to check the for the transient child of the toplevel window. |
- aura::Window* toplevel = GetToplevelWindow(window); |
- if (!toplevel) |
- return NULL; |
- |
- return GetModalTransientChild(toplevel, window); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// WindowModalityController, public: |
- |
-WindowModalityController::WindowModalityController( |
- ui::EventTarget* event_target) |
- : event_target_(event_target) { |
- aura::Env::GetInstance()->AddObserver(this); |
- DCHECK(event_target->IsPreTargetListEmpty()); |
- event_target_->AddPreTargetHandler(this); |
-} |
- |
-WindowModalityController::~WindowModalityController() { |
- event_target_->RemovePreTargetHandler(this); |
- aura::Env::GetInstance()->RemoveObserver(this); |
- for (size_t i = 0; i < windows_.size(); ++i) |
- windows_[i]->RemoveObserver(this); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// WindowModalityController, aura::EventFilter implementation: |
- |
-void WindowModalityController::OnKeyEvent(ui::KeyEvent* event) { |
- aura::Window* target = static_cast<aura::Window*>(event->target()); |
- if (GetModalTransient(target)) |
- event->SetHandled(); |
-} |
- |
-void WindowModalityController::OnMouseEvent(ui::MouseEvent* event) { |
- aura::Window* target = static_cast<aura::Window*>(event->target()); |
- if (ProcessLocatedEvent(target, event)) |
- event->SetHandled(); |
-} |
- |
-void WindowModalityController::OnTouchEvent(ui::TouchEvent* event) { |
- aura::Window* target = static_cast<aura::Window*>(event->target()); |
- if (ProcessLocatedEvent(target, event)) |
- event->SetHandled(); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// WindowModalityController, aura::EnvObserver implementation: |
- |
-void WindowModalityController::OnWindowInitialized(aura::Window* window) { |
- windows_.push_back(window); |
- window->AddObserver(this); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// WindowModalityController, aura::WindowObserver implementation: |
- |
-void WindowModalityController::OnWindowPropertyChanged(aura::Window* window, |
- const void* key, |
- intptr_t old) { |
- // In tests, we sometimes create the modality relationship after a window is |
- // visible. |
- if (key == aura::client::kModalKey && |
- window->GetProperty(aura::client::kModalKey) != ui::MODAL_TYPE_NONE && |
- window->IsVisible()) { |
- ActivateWindow(window); |
- ui::GestureRecognizer::Get()->TransferEventsTo(GetTransientParent(window), |
- NULL); |
- } |
-} |
- |
-void WindowModalityController::OnWindowVisibilityChanged( |
- aura::Window* window, |
- bool visible) { |
- if (visible && window->GetProperty(aura::client::kModalKey) != |
- ui::MODAL_TYPE_NONE) { |
- ui::GestureRecognizer::Get()->TransferEventsTo(GetTransientParent(window), |
- NULL); |
- // Make sure no other window has capture, otherwise |window| won't get mouse |
- // events. |
- aura::Window* capture_window = aura::client::GetCaptureWindow(window); |
- if (capture_window) |
- capture_window->ReleaseCapture(); |
- } |
-} |
- |
-void WindowModalityController::OnWindowDestroyed(aura::Window* window) { |
- windows_.erase(std::find(windows_.begin(), windows_.end(), window)); |
- window->RemoveObserver(this); |
-} |
- |
-bool WindowModalityController::ProcessLocatedEvent(aura::Window* target, |
- ui::LocatedEvent* event) { |
- if (event->handled()) |
- return false; |
- aura::Window* modal_transient_child = GetModalTransient(target); |
- if (modal_transient_child && (event->type() == ui::ET_MOUSE_PRESSED || |
- event->type() == ui::ET_TOUCH_PRESSED)) { |
- AnimateWindow(modal_transient_child, WINDOW_ANIMATION_TYPE_BOUNCE); |
- } |
- if (event->type() == ui::ET_TOUCH_CANCELLED) |
- return false; |
- return !!modal_transient_child; |
-} |
- |
-} // namespace corewm |
-} // namespace views |