| 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_
|
|
|