Index: mojo/services/window_manager/focus_rules.h |
diff --git a/mojo/services/window_manager/focus_rules.h b/mojo/services/window_manager/focus_rules.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..becd1140593e6f9661de448f4c502cfc9738601a |
--- /dev/null |
+++ b/mojo/services/window_manager/focus_rules.h |
@@ -0,0 +1,65 @@ |
+// 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 "third_party/mojo_services/src/view_manager/public/cpp/types.h" |
+#include "third_party/mojo_services/src/view_manager/public/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_ |