| Index: components/mus/ws/window_server.h
|
| diff --git a/components/mus/ws/window_server.h b/components/mus/ws/window_server.h
|
| deleted file mode 100644
|
| index 0ecbc76ee4cbf90554d5794dc7343d3c4b88b1b4..0000000000000000000000000000000000000000
|
| --- a/components/mus/ws/window_server.h
|
| +++ /dev/null
|
| @@ -1,342 +0,0 @@
|
| -// 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 COMPONENTS_MUS_WS_WINDOW_SERVER_H_
|
| -#define COMPONENTS_MUS_WS_WINDOW_SERVER_H_
|
| -
|
| -#include <stdint.h>
|
| -
|
| -#include <map>
|
| -#include <memory>
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "base/macros.h"
|
| -#include "components/mus/public/interfaces/window_manager_window_tree_factory.mojom.h"
|
| -#include "components/mus/public/interfaces/window_tree.mojom.h"
|
| -#include "components/mus/public/interfaces/window_tree_host.mojom.h"
|
| -#include "components/mus/surfaces/surfaces_state.h"
|
| -#include "components/mus/ws/display.h"
|
| -#include "components/mus/ws/display_manager_delegate.h"
|
| -#include "components/mus/ws/ids.h"
|
| -#include "components/mus/ws/operation.h"
|
| -#include "components/mus/ws/server_window_delegate.h"
|
| -#include "components/mus/ws/server_window_observer.h"
|
| -#include "components/mus/ws/user_id_tracker.h"
|
| -#include "components/mus/ws/user_id_tracker_observer.h"
|
| -#include "components/mus/ws/window_manager_window_tree_factory_set.h"
|
| -#include "mojo/public/cpp/bindings/array.h"
|
| -#include "mojo/public/cpp/bindings/binding.h"
|
| -
|
| -namespace mus {
|
| -namespace ws {
|
| -
|
| -class AccessPolicy;
|
| -class DisplayManager;
|
| -class ServerWindow;
|
| -class UserActivityMonitor;
|
| -class WindowManagerState;
|
| -class WindowServerDelegate;
|
| -class WindowTree;
|
| -class WindowTreeBinding;
|
| -
|
| -// WindowServer manages the set of clients of the window server (all the
|
| -// WindowTrees) as well as providing the root of the hierarchy.
|
| -class WindowServer : public ServerWindowDelegate,
|
| - public ServerWindowObserver,
|
| - public DisplayManagerDelegate,
|
| - public UserIdTrackerObserver {
|
| - public:
|
| - WindowServer(WindowServerDelegate* delegate,
|
| - const scoped_refptr<mus::SurfacesState>& surfaces_state);
|
| - ~WindowServer() override;
|
| -
|
| - WindowServerDelegate* delegate() { return delegate_; }
|
| -
|
| - UserIdTracker* user_id_tracker() { return &user_id_tracker_; }
|
| - const UserIdTracker* user_id_tracker() const { return &user_id_tracker_; }
|
| -
|
| - DisplayManager* display_manager() { return display_manager_.get(); }
|
| - const DisplayManager* display_manager() const {
|
| - return display_manager_.get();
|
| - }
|
| -
|
| - // Creates a new ServerWindow. The return value is owned by the caller, but
|
| - // must be destroyed before WindowServer.
|
| - ServerWindow* CreateServerWindow(
|
| - const WindowId& id,
|
| - const std::map<std::string, std::vector<uint8_t>>& properties);
|
| -
|
| - // Returns the id for the next WindowTree.
|
| - ClientSpecificId GetAndAdvanceNextClientId();
|
| -
|
| - // See description of WindowTree::Embed() for details. This assumes
|
| - // |transport_window_id| is valid.
|
| - WindowTree* EmbedAtWindow(ServerWindow* root,
|
| - const UserId& user_id,
|
| - mojom::WindowTreeClientPtr client,
|
| - uint32_t flags,
|
| - std::unique_ptr<AccessPolicy> access_policy);
|
| -
|
| - // Adds |tree_impl_ptr| to the set of known trees. Use DestroyTree() to
|
| - // destroy the tree.
|
| - void AddTree(std::unique_ptr<WindowTree> tree_impl_ptr,
|
| - std::unique_ptr<WindowTreeBinding> binding,
|
| - mojom::WindowTreePtr tree_ptr);
|
| - WindowTree* CreateTreeForWindowManager(
|
| - const UserId& user_id,
|
| - mojom::WindowTreeRequest window_tree_request,
|
| - mojom::WindowTreeClientPtr window_tree_client);
|
| - // Invoked when a WindowTree's connection encounters an error.
|
| - void DestroyTree(WindowTree* tree);
|
| -
|
| - // Returns the tree by client id.
|
| - WindowTree* GetTreeWithId(ClientSpecificId client_id);
|
| -
|
| - WindowTree* GetTreeWithClientName(const std::string& client_name);
|
| -
|
| - size_t num_trees() const { return tree_map_.size(); }
|
| -
|
| - // Returns the Window identified by |id|.
|
| - ServerWindow* GetWindow(const WindowId& id);
|
| -
|
| - // Schedules a paint for the specified region in the coordinates of |window|.
|
| - void SchedulePaint(ServerWindow* window, const gfx::Rect& bounds);
|
| -
|
| - OperationType current_operation_type() const {
|
| - return current_operation_ ? current_operation_->type()
|
| - : OperationType::NONE;
|
| - }
|
| -
|
| - // Returns true if the specified client issued the current operation.
|
| - bool IsOperationSource(ClientSpecificId client_id) const {
|
| - return current_operation_ &&
|
| - current_operation_->source_tree_id() == client_id;
|
| - }
|
| -
|
| - // Invoked when a client messages a client about the change. This is used
|
| - // to avoid sending ServerChangeIdAdvanced() unnecessarily.
|
| - void OnTreeMessagedClient(ClientSpecificId id);
|
| -
|
| - // Returns true if OnTreeMessagedClient() was invoked for id.
|
| - bool DidTreeMessageClient(ClientSpecificId id) const;
|
| -
|
| - // Returns the WindowTree that has |id| as a root.
|
| - WindowTree* GetTreeWithRoot(const ServerWindow* window) {
|
| - return const_cast<WindowTree*>(
|
| - const_cast<const WindowServer*>(this)->GetTreeWithRoot(window));
|
| - }
|
| - const WindowTree* GetTreeWithRoot(const ServerWindow* window) const;
|
| -
|
| - void OnFirstWindowManagerWindowTreeFactoryReady();
|
| -
|
| - UserActivityMonitor* GetUserActivityMonitorForUser(const UserId& user_id);
|
| -
|
| - WindowManagerWindowTreeFactorySet* window_manager_window_tree_factory_set() {
|
| - return &window_manager_window_tree_factory_set_;
|
| - }
|
| -
|
| - // Sets focus to |window|. Returns true if |window| already has focus, or
|
| - // focus was successfully changed. Returns |false| if |window| is not a valid
|
| - // window to receive focus.
|
| - bool SetFocusedWindow(ServerWindow* window);
|
| - ServerWindow* GetFocusedWindow();
|
| -
|
| - // Returns a change id for the window manager that is associated with
|
| - // |source| and |client_change_id|. When the window manager replies
|
| - // WindowManagerChangeCompleted() is called to obtain the original source
|
| - // and client supplied change_id that initiated the called.
|
| - uint32_t GenerateWindowManagerChangeId(WindowTree* source,
|
| - uint32_t client_change_id);
|
| -
|
| - // Called when a response from the window manager is obtained. Calls to
|
| - // the client that initiated the change with the change id originally
|
| - // supplied by the client.
|
| - void WindowManagerChangeCompleted(uint32_t window_manager_change_id,
|
| - bool success);
|
| - void WindowManagerCreatedTopLevelWindow(WindowTree* wm_tree,
|
| - uint32_t window_manager_change_id,
|
| - const ServerWindow* window);
|
| -
|
| - // Called when we get an unexpected message from the WindowManager.
|
| - // TODO(sky): decide what we want to do here.
|
| - void WindowManagerSentBogusMessage() {}
|
| -
|
| - // These functions trivially delegate to all WindowTrees, which in
|
| - // term notify their clients.
|
| - void ProcessWindowBoundsChanged(const ServerWindow* window,
|
| - const gfx::Rect& old_bounds,
|
| - const gfx::Rect& new_bounds);
|
| - void ProcessClientAreaChanged(
|
| - const ServerWindow* window,
|
| - const gfx::Insets& new_client_area,
|
| - const std::vector<gfx::Rect>& new_additional_client_areas);
|
| - void ProcessLostCapture(const ServerWindow* window);
|
| - void ProcessWillChangeWindowHierarchy(const ServerWindow* window,
|
| - const ServerWindow* new_parent,
|
| - const ServerWindow* old_parent);
|
| - void ProcessWindowHierarchyChanged(const ServerWindow* window,
|
| - const ServerWindow* new_parent,
|
| - const ServerWindow* old_parent);
|
| - void ProcessWindowReorder(const ServerWindow* window,
|
| - const ServerWindow* relative_window,
|
| - const mojom::OrderDirection direction);
|
| - void ProcessWindowDeleted(const ServerWindow* window);
|
| - void ProcessWillChangeWindowPredefinedCursor(ServerWindow* window,
|
| - int32_t cursor_id);
|
| -
|
| - // Sends an |event| to all WindowTrees belonging to |user_id| that might be
|
| - // observing events. Skips |ignore_tree| if it is non-null.
|
| - void SendToEventObservers(const ui::Event& event,
|
| - const UserId& user_id,
|
| - WindowTree* ignore_tree);
|
| -
|
| - // Sets a callback to be called whenever a ServerWindow is scheduled for
|
| - // a [re]paint. This should only be called in a test configuration.
|
| - void SetPaintCallback(const base::Callback<void(ServerWindow*)>& callback);
|
| -
|
| - private:
|
| - friend class Operation;
|
| -
|
| - using WindowTreeMap =
|
| - std::map<ClientSpecificId, std::unique_ptr<WindowTree>>;
|
| - using UserActivityMonitorMap =
|
| - std::map<UserId, std::unique_ptr<UserActivityMonitor>>;
|
| -
|
| - struct InFlightWindowManagerChange {
|
| - // Identifies the client that initiated the change.
|
| - ClientSpecificId client_id;
|
| -
|
| - // Change id supplied by the client.
|
| - uint32_t client_change_id;
|
| - };
|
| -
|
| - using InFlightWindowManagerChangeMap =
|
| - std::map<uint32_t, InFlightWindowManagerChange>;
|
| -
|
| - bool GetAndClearInFlightWindowManagerChange(
|
| - uint32_t window_manager_change_id,
|
| - InFlightWindowManagerChange* change);
|
| -
|
| - // Invoked when a client is about to execute a window server operation.
|
| - // Subsequently followed by FinishOperation() once the change is done.
|
| - //
|
| - // Changes should never nest, meaning each PrepareForOperation() must be
|
| - // balanced with a call to FinishOperation() with no PrepareForOperation()
|
| - // in between.
|
| - void PrepareForOperation(Operation* op);
|
| -
|
| - // Balances a call to PrepareForOperation().
|
| - void FinishOperation();
|
| -
|
| - // Updates the native cursor by figuring out what window is under the mouse
|
| - // cursor. This is run in response to events that change the bounds or window
|
| - // hierarchy.
|
| - void UpdateNativeCursorFromMouseLocation(ServerWindow* window);
|
| -
|
| - // Updates the native cursor if the cursor is currently inside |window|. This
|
| - // is run in response to events that change the mouse cursor properties of
|
| - // |window|.
|
| - void UpdateNativeCursorIfOver(ServerWindow* window);
|
| -
|
| - // Overridden from ServerWindowDelegate:
|
| - mus::SurfacesState* GetSurfacesState() override;
|
| - void OnScheduleWindowPaint(ServerWindow* window) override;
|
| - const ServerWindow* GetRootWindow(const ServerWindow* window) const override;
|
| - void ScheduleSurfaceDestruction(ServerWindow* window) override;
|
| -
|
| - // Overridden from ServerWindowObserver:
|
| - void OnWindowDestroyed(ServerWindow* window) override;
|
| - void OnWillChangeWindowHierarchy(ServerWindow* window,
|
| - ServerWindow* new_parent,
|
| - ServerWindow* old_parent) override;
|
| - void OnWindowHierarchyChanged(ServerWindow* window,
|
| - ServerWindow* new_parent,
|
| - ServerWindow* old_parent) override;
|
| - void OnWindowBoundsChanged(ServerWindow* window,
|
| - const gfx::Rect& old_bounds,
|
| - const gfx::Rect& new_bounds) override;
|
| - void OnWindowClientAreaChanged(
|
| - ServerWindow* window,
|
| - const gfx::Insets& new_client_area,
|
| - const std::vector<gfx::Rect>& new_additional_client_areas) override;
|
| - void OnWindowReordered(ServerWindow* window,
|
| - ServerWindow* relative,
|
| - mojom::OrderDirection direction) override;
|
| - void OnWillChangeWindowVisibility(ServerWindow* window) override;
|
| - void OnWindowVisibilityChanged(ServerWindow* window) override;
|
| - void OnWindowOpacityChanged(ServerWindow* window,
|
| - float old_opacity,
|
| - float new_opacity) override;
|
| - void OnWindowSharedPropertyChanged(
|
| - ServerWindow* window,
|
| - const std::string& name,
|
| - const std::vector<uint8_t>* new_data) override;
|
| - void OnWindowPredefinedCursorChanged(ServerWindow* window,
|
| - int32_t cursor_id) override;
|
| - void OnWindowNonClientCursorChanged(ServerWindow* window,
|
| - int32_t cursor_id) override;
|
| - void OnWindowTextInputStateChanged(ServerWindow* window,
|
| - const ui::TextInputState& state) override;
|
| - void OnTransientWindowAdded(ServerWindow* window,
|
| - ServerWindow* transient_child) override;
|
| - void OnTransientWindowRemoved(ServerWindow* window,
|
| - ServerWindow* transient_child) override;
|
| -
|
| - // DisplayManagerDelegate:
|
| - void OnFirstDisplayReady() override;
|
| - void OnNoMoreDisplays() override;
|
| - bool GetFrameDecorationsForUser(
|
| - const UserId& user_id,
|
| - mojom::FrameDecorationValuesPtr* values) override;
|
| - WindowManagerState* GetWindowManagerStateForUser(
|
| - const UserId& user_id) override;
|
| -
|
| - // UserIdTrackerObserver:
|
| - void OnActiveUserIdChanged(const UserId& previously_active_id,
|
| - const UserId& active_id) override;
|
| - void OnUserIdAdded(const UserId& id) override;
|
| - void OnUserIdRemoved(const UserId& id) override;
|
| -
|
| - UserIdTracker user_id_tracker_;
|
| -
|
| - WindowServerDelegate* delegate_;
|
| -
|
| - // State for rendering into a Surface.
|
| - scoped_refptr<mus::SurfacesState> surfaces_state_;
|
| -
|
| - // ID to use for next WindowTree.
|
| - ClientSpecificId next_client_id_;
|
| -
|
| - std::unique_ptr<DisplayManager> display_manager_;
|
| -
|
| - // Set of WindowTrees.
|
| - WindowTreeMap tree_map_;
|
| -
|
| - // If non-null then we're processing a client operation. The Operation is
|
| - // not owned by us (it's created on the stack by WindowTree).
|
| - Operation* current_operation_;
|
| -
|
| - bool in_destructor_;
|
| -
|
| - // Maps from window manager change id to the client that initiated the
|
| - // request.
|
| - InFlightWindowManagerChangeMap in_flight_wm_change_map_;
|
| -
|
| - // Next id supplied to the window manager.
|
| - uint32_t next_wm_change_id_;
|
| -
|
| - base::Callback<void(ServerWindow*)> window_paint_callback_;
|
| -
|
| - UserActivityMonitorMap activity_monitor_map_;
|
| -
|
| - WindowManagerWindowTreeFactorySet window_manager_window_tree_factory_set_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(WindowServer);
|
| -};
|
| -
|
| -} // namespace ws
|
| -} // namespace mus
|
| -
|
| -#endif // COMPONENTS_MUS_WS_WINDOW_SERVER_H_
|
|
|