| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef ASH_DRAG_DROP_TAB_DRAG_DROP_WINDOWS_HIDER_H_ |
| #define ASH_DRAG_DROP_TAB_DRAG_DROP_WINDOWS_HIDER_H_ |
| |
| #include <map> |
| |
| #include "ash/ash_export.h" |
| #include "base/memory/raw_ptr.h" |
| #include "ui/aura/window.h" |
| #include "ui/aura/window_observer.h" |
| |
| namespace ash { |
| |
| // Hides all visible windows except the source window from which the webui tab |
| // drag originates, and restores the windows' visibility upon its destruction. |
| // It also blurs and darkens the background, hides the home launcher if home |
| // launcher is enabled. Only need to do so if we need to scale up and down the |
| // source window when dragging a web ui tab out of it. |
| class ASH_EXPORT TabDragDropWindowsHider : public aura::WindowObserver { |
| public: |
| explicit TabDragDropWindowsHider(aura::Window* source_window); |
| |
| TabDragDropWindowsHider(const TabDragDropWindowsHider&) = delete; |
| TabDragDropWindowsHider& operator=(const TabDragDropWindowsHider&) = delete; |
| |
| ~TabDragDropWindowsHider() override; |
| |
| // aura::WindowObserver: |
| void OnWindowDestroying(aura::Window* window) override; |
| void OnWindowVisibilityChanged(aura::Window* window, bool visible) override; |
| |
| int GetWindowVisibilityMapSizeForTesting() const; |
| |
| private: |
| // The window from which the drag originated. |
| raw_ptr<aura::Window> source_window_; |
| |
| // The root window the drag is taking place within. Guaranteed to be |
| // non-null during the lifetime of |this|. |
| raw_ptr<aura::Window> root_window_; |
| |
| // Maintains the map between windows and their visibilities. All windows |
| // except the dragged window and the source window should stay hidden during |
| // dragging. |
| std::map<aura::Window*, bool> window_visibility_map_; |
| }; |
| |
| } // namespace ash |
| |
| #endif // ASH_DRAG_DROP_TAB_DRAG_DROP_WINDOWS_HIDER_H_ |