// 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_BASIC_FOCUS_RULES_H_
#define SERVICES_WINDOW_MANAGER_BASIC_FOCUS_RULES_H_

#include "services/window_manager/focus_rules.h"

namespace mojo {

class View;

// The focusing rules used inside a window manager.
//
// This is intended to be a user supplyable, subclassable component passed to
// WindowManagerApp, allowing for the creation of other window managers.
class BasicFocusRules : public FocusRules {
 public:
  BasicFocusRules(mojo::View* window_container);
  ~BasicFocusRules() override;

 protected:
  // Overridden from mojo::FocusRules:
  bool SupportsChildActivation(mojo::View* view) const override;
  bool IsToplevelView(mojo::View* view) const override;
  bool CanActivateView(mojo::View* view) const override;
  bool CanFocusView(mojo::View* view) const override;
  mojo::View* GetToplevelView(mojo::View* view) const override;
  mojo::View* GetActivatableView(mojo::View* view) const override;
  mojo::View* GetFocusableView(mojo::View* view) const override;
  mojo::View* GetNextActivatableView(mojo::View* activatable) const override;

 private:
  bool CanFocusViewImpl(View* view) const;

  // Tests to see if |view| is in |window_container_|.
  bool IsViewParentedToWindowContainer(View* view) const;

  mojo::View* window_container_;

  DISALLOW_COPY_AND_ASSIGN(BasicFocusRules);
};

}  // namespace mojo

#endif  // SERVICES_WINDOW_MANAGER_BASIC_FOCUS_RULES_H_
