Index: components/mus/common/transient_window_utils.h |
diff --git a/components/mus/common/transient_window_utils.h b/components/mus/common/transient_window_utils.h |
deleted file mode 100644 |
index 17eedc63a25a57807fa1d9b989a38300bde2d03b..0000000000000000000000000000000000000000 |
--- a/components/mus/common/transient_window_utils.h |
+++ /dev/null |
@@ -1,126 +0,0 @@ |
-// 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 COMPONENTS_MUS_COMMON_TRANSIENT_WINDOW_UTILS_H_ |
-#define COMPONENTS_MUS_COMMON_TRANSIENT_WINDOW_UTILS_H_ |
- |
-#include <stddef.h> |
- |
-#include <vector> |
- |
-#include "components/mus/public/interfaces/mus_constants.mojom.h" |
- |
-namespace mus { |
- |
-// Returns true if |window| has |ancestor| as a transient ancestor. A transient |
-// ancestor is found by following the transient parent chain of the window. |
-template <class T> |
-bool HasTransientAncestor(const T* window, const T* ancestor) { |
- const T* transient_parent = window->transient_parent(); |
- if (transient_parent == ancestor) |
- return true; |
- return transient_parent ? HasTransientAncestor(transient_parent, ancestor) |
- : false; |
-} |
- |
-// Populates |ancestors| with all transient ancestors of |window| that are |
-// siblings of |window|. Returns true if any ancestors were found, false if not. |
-template <class T> |
-bool GetAllTransientAncestors(T* window, std::vector<T*>* ancestors) { |
- T* parent = window->parent(); |
- for (; window; window = window->transient_parent()) { |
- if (window->parent() == parent) |
- ancestors->push_back(window); |
- } |
- return !ancestors->empty(); |
-} |
- |
-// Replaces |window1| and |window2| with their possible transient ancestors that |
-// are still siblings (have a common transient parent). |window1| and |window2| |
-// are not modified if such ancestors cannot be found. |
-template <class T> |
-void FindCommonTransientAncestor(T** window1, T** window2) { |
- DCHECK(window1); |
- DCHECK(window2); |
- DCHECK(*window1); |
- DCHECK(*window2); |
- // Assemble chains of ancestors of both windows. |
- std::vector<T*> ancestors1; |
- std::vector<T*> ancestors2; |
- if (!GetAllTransientAncestors(*window1, &ancestors1) || |
- !GetAllTransientAncestors(*window2, &ancestors2)) { |
- return; |
- } |
- // Walk the two chains backwards and look for the first difference. |
- auto it1 = ancestors1.rbegin(); |
- auto it2 = ancestors2.rbegin(); |
- for (; it1 != ancestors1.rend() && it2 != ancestors2.rend(); ++it1, ++it2) { |
- if (*it1 != *it2) { |
- *window1 = *it1; |
- *window2 = *it2; |
- break; |
- } |
- } |
-} |
- |
-template <class T> |
-bool AdjustStackingForTransientWindows(T** child, |
- T** target, |
- mojom::OrderDirection* direction, |
- T* stacking_target) { |
- if (stacking_target == *target) |
- return true; |
- |
- // For windows that have transient children stack the transient ancestors that |
- // are siblings. This prevents one transient group from being inserted in the |
- // middle of another. |
- FindCommonTransientAncestor(child, target); |
- |
- // When stacking above skip to the topmost transient descendant of the target. |
- if (*direction == mojom::OrderDirection::ABOVE && |
- !HasTransientAncestor(*child, *target)) { |
- const std::vector<T*>& siblings((*child)->parent()->children()); |
- size_t target_i = |
- std::find(siblings.begin(), siblings.end(), *target) - siblings.begin(); |
- while (target_i + 1 < siblings.size() && |
- HasTransientAncestor(siblings[target_i + 1], *target)) { |
- ++target_i; |
- } |
- *target = siblings[target_i]; |
- } |
- |
- return *child != *target; |
-} |
- |
-// Stacks transient descendants of |window| that are its siblings just above it. |
-// |GetStackingTarget| is a function that returns a marker associated with a |
-// Window that indicates the current Window being stacked. |
-// |Reorder| is a function that takes in two windows and orders the first |
-// relative to the second based on the provided OrderDirection. |
-template <class T> |
-void RestackTransientDescendants(T* window, |
- T** (*GetStackingTarget)(T*), |
- void (*Reorder)(T*, |
- T*, |
- mojom::OrderDirection)) { |
- T* parent = window->parent(); |
- if (!parent) |
- return; |
- |
- // stack any transient children that share the same parent to be in front of |
- // |window_|. the existing stacking order is preserved by iterating backwards |
- // and always stacking on top. |
- std::vector<T*> children(parent->children()); |
- for (auto it = children.rbegin(); it != children.rend(); ++it) { |
- if ((*it) != window && HasTransientAncestor(*it, window)) { |
- T* old_stacking_target = *GetStackingTarget(*it); |
- *GetStackingTarget(*it) = window; |
- Reorder(*it, window, mojom::OrderDirection::ABOVE); |
- *GetStackingTarget(*it) = old_stacking_target; |
- } |
- } |
-} |
-} // namespace mus |
- |
-#endif // COMPONENTS_MUS_COMMON_TRANSIENT_WINDOW_UTILS_H_ |