| // 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 SERVICES_WINDOW_MANAGER_FOCUS_RULES_H_ |
| #define SERVICES_WINDOW_MANAGER_FOCUS_RULES_H_ |
| |
| #include "mojo/services/view_manager/cpp/types.h" |
| #include "mojo/services/view_manager/cpp/view.h" |
| |
| namespace window_manager { |
| |
| // Implemented by an object that establishes the rules about what can be |
| // focused or activated. |
| class FocusRules { |
| public: |
| virtual ~FocusRules() {} |
| |
| // Returns true if the children of |window| can be activated. |
| virtual bool SupportsChildActivation(mojo::View* window) const = 0; |
| |
| // Returns true if |view| is a toplevel view. Whether or not a view |
| // is considered toplevel is determined by a similar set of rules that |
| // govern activation and focus. Not all toplevel views are activatable, |
| // call CanActivateView() to determine if a view can be activated. |
| virtual bool IsToplevelView(mojo::View* view) const = 0; |
| // Returns true if |view| can be activated or focused. |
| virtual bool CanActivateView(mojo::View* view) const = 0; |
| // For CanFocusView(), null is supported, because null is a valid focusable |
| // view (in the case of clearing focus). |
| virtual bool CanFocusView(mojo::View* view) const = 0; |
| |
| // Returns the toplevel view containing |view|. Not all toplevel views |
| // are activatable, call GetActivatableView() instead to return the |
| // activatable view, which might be in a different hierarchy. |
| // Will return null if |view| is not contained by a view considered to be |
| // a toplevel view. |
| virtual mojo::View* GetToplevelView(mojo::View* view) const = 0; |
| // Returns the activatable or focusable view given an attempt to activate or |
| // focus |view|. Some possible scenarios (not intended to be exhaustive): |
| // - |view| is a child of a non-focusable view and so focus must be set |
| // according to rules defined by the delegate, e.g. to a parent. |
| // - |view| is an activatable view that is the transient parent of a modal |
| // view, so attempts to activate |view| should result in the modal |
| // transient being activated instead. |
| // These methods may return null if they are unable to find an activatable |
| // or focusable view given |view|. |
| virtual mojo::View* GetActivatableView(mojo::View* view) const = 0; |
| virtual mojo::View* GetFocusableView(mojo::View* view) const = 0; |
| |
| // Returns the next view to activate in the event that |ignore| is no longer |
| // activatable. This function is called when something is happening to |
| // |ignore| that means it can no longer have focus or activation, including |
| // but not limited to: |
| // - it or its parent hierarchy is being hidden, or removed from the |
| // RootView. |
| // - it is being destroyed. |
| // - it is being explicitly deactivated. |
| // |ignore| cannot be null. |
| virtual mojo::View* GetNextActivatableView(mojo::View* ignore) const = 0; |
| }; |
| |
| } // namespace window_manager |
| |
| #endif // SERVICES_WINDOW_MANAGER_FOCUS_RULES_H_ |