# 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.

import("//build/config/ui.gni")
import("//mojo/public/mojo_application.gni")
import("//mojo/public/tools/bindings/mojom.gni")

mojo_native_application("window_manager") {
  output_name = "example_window_manager"

  sources = [
    "window_manager.cc",
  ]

  deps = [
    ":bindings",
    "//base",
    "//mojo/application",
    "//mojo/common:common",
    "//mojo/converters/geometry",
    "//mojo/converters/input_events",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/utility",
    "//mojo/services/geometry/interfaces",
    "//mojo/services/input_events/interfaces",
    "//mojo/services/navigation/interfaces",
    "//mojo/services/view_manager/cpp",
    "//services/window_manager:lib",
    "//ui/events:events",
    "//url:url",
  ]
}

mojom("bindings") {
  sources = [
    "debug_panel_host.mojom",
    "window_manager.mojom",
  ]
  import_dirs = [ get_path_info("../../mojo/services", "abspath") ]
  deps = [
    "//mojo/services/geometry/interfaces",
    "//mojo/services/navigation/interfaces",
    "//mojo/services/network/interfaces",
  ]
}
