| Index: ash/wm/maximize_mode/maximize_mode_window_manager.h
|
| diff --git a/ash/wm/maximize_mode/maximize_mode_window_manager.h b/ash/wm/maximize_mode/maximize_mode_window_manager.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fbdedccf7d17d1ee97e95d3cd3399bbcd26b7ce8
|
| --- /dev/null
|
| +++ b/ash/wm/maximize_mode/maximize_mode_window_manager.h
|
| @@ -0,0 +1,145 @@
|
| +// Copyright 2014 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 ASH_WM_MAXIMIZE_MODE_MAXIMIZE_MODE_WINDOW_MANAGER_H_
|
| +#define ASH_WM_MAXIMIZE_MODE_MAXIMIZE_MODE_WINDOW_MANAGER_H_
|
| +
|
| +#include <stdint.h>
|
| +
|
| +#include <map>
|
| +#include <unordered_set>
|
| +
|
| +#include "ash/ash_export.h"
|
| +#include "ash/shell_observer.h"
|
| +#include "ash/wm/window_state.h"
|
| +#include "base/macros.h"
|
| +#include "ui/aura/window_observer.h"
|
| +#include "ui/display/display_observer.h"
|
| +
|
| +namespace aura {
|
| +class Window;
|
| +}
|
| +
|
| +namespace ash {
|
| +class MaximizeModeController;
|
| +class MaximizeModeWindowState;
|
| +
|
| +namespace wm {
|
| +class MaximizeModeEventHandler;
|
| +}
|
| +
|
| +// A window manager which - when created - will force all windows into maximized
|
| +// mode. Exception are panels and windows which cannot be maximized.
|
| +// Windows which cannot be maximized / resized are centered with a layer placed
|
| +// behind the window so that no other windows are visible and/or obscured.
|
| +// With the destruction of the manager all windows will be restored to their
|
| +// original state.
|
| +class ASH_EXPORT MaximizeModeWindowManager : public aura::WindowObserver,
|
| + public display::DisplayObserver,
|
| + public ShellObserver {
|
| + public:
|
| + // This should only be deleted by the creator (ash::Shell).
|
| + ~MaximizeModeWindowManager() override;
|
| +
|
| + // Returns the number of maximized & tracked windows by this manager.
|
| + int GetNumberOfManagedWindows();
|
| +
|
| + // Adds a window which needs to be maximized. This is used by other window
|
| + // managers for windows which needs to get tracked due to (upcoming) state
|
| + // changes.
|
| + // The call gets ignored if the window was already or should not be handled.
|
| + void AddWindow(aura::Window* window);
|
| +
|
| + // Called from a window state object when it gets destroyed.
|
| + void WindowStateDestroyed(aura::Window* window);
|
| +
|
| + // ShellObserver overrides:
|
| + void OnOverviewModeStarting() override;
|
| + void OnOverviewModeEnded() override;
|
| +
|
| + // Overridden from WindowObserver:
|
| + void OnWindowDestroying(aura::Window* window) override;
|
| + void OnWindowHierarchyChanged(const HierarchyChangeParams& params) override;
|
| + void OnWindowPropertyChanged(aura::Window* window,
|
| + const void* key,
|
| + intptr_t old) override;
|
| + void OnWindowBoundsChanged(aura::Window* window,
|
| + const gfx::Rect& old_bounds,
|
| + const gfx::Rect& new_bounds) override;
|
| + void OnWindowVisibilityChanged(aura::Window* window, bool visible) override;
|
| +
|
| + // display::DisplayObserver overrides:
|
| + void OnDisplayAdded(const display::Display& display) override;
|
| + void OnDisplayRemoved(const display::Display& display) override;
|
| + void OnDisplayMetricsChanged(const display::Display& display,
|
| + uint32_t metrics) override;
|
| +
|
| + // Tell all managing windows not to handle WM events.
|
| + void SetIgnoreWmEventsForExit();
|
| +
|
| + protected:
|
| + friend class MaximizeModeController;
|
| +
|
| + // The object should only be created by the ash::Shell.
|
| + MaximizeModeWindowManager();
|
| +
|
| + private:
|
| + using WindowToState = std::map<aura::Window*, MaximizeModeWindowState*>;
|
| +
|
| + // Maximize all windows and restore their current state.
|
| + void MaximizeAllWindows();
|
| +
|
| + // Restore all windows to their previous state.
|
| + void RestoreAllWindows();
|
| +
|
| + // Set whether to defer bounds updates on all tracked windows. When set to
|
| + // false bounds will be updated as they may be stale.
|
| + void SetDeferBoundsUpdates(bool defer_bounds_updates);
|
| +
|
| + // If the given window should be handled by us, this function will maximize it
|
| + // and add it to the list of known windows (remembering the initial show
|
| + // state).
|
| + // Note: If the given window cannot be handled by us the function will return
|
| + // immediately.
|
| + void MaximizeAndTrackWindow(aura::Window* window);
|
| +
|
| + // Remove a window from our tracking list.
|
| + void ForgetWindow(aura::Window* window);
|
| +
|
| + // Returns true when the given window should be modified in any way by us.
|
| + bool ShouldHandleWindow(aura::Window* window);
|
| +
|
| + // Add window creation observers to track creation of new windows.
|
| + void AddWindowCreationObservers();
|
| +
|
| + // Remove Window creation observers.
|
| + void RemoveWindowCreationObservers();
|
| +
|
| + // Change the internal state (e.g. observers) when the display configuration
|
| + // changes.
|
| + void DisplayConfigurationChanged();
|
| +
|
| + // Returns true when the |window| is a container window.
|
| + bool IsContainerWindow(aura::Window* window);
|
| +
|
| + // Add a backdrop behind the currently active window on each desktop.
|
| + void EnableBackdropBehindTopWindowOnEachDisplay(bool enable);
|
| +
|
| + // Every window which got touched by our window manager gets added here.
|
| + WindowToState window_state_map_;
|
| +
|
| + // All container windows which have to be tracked.
|
| + std::unordered_set<aura::Window*> observed_container_windows_;
|
| +
|
| + // Windows added to the container, but not yet shown.
|
| + std::unordered_set<aura::Window*> added_windows_;
|
| +
|
| + std::unique_ptr<wm::MaximizeModeEventHandler> event_handler_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(MaximizeModeWindowManager);
|
| +};
|
| +
|
| +} // namespace ash
|
| +
|
| +#endif // ASH_WM_MAXIMIZE_MODE_MAXIMIZE_MODE_WINDOW_MANAGER_H_
|
|
|