# Copyright 2018 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("//services/service_manager/public/service_manifest.gni")

# KSV: Keyboard Shortcut Viewer
source_set("lib") {
  sources = [
    "keyboard_shortcut_item.cc",
    "keyboard_shortcut_item.h",
    "keyboard_shortcut_viewer_metadata.cc",
    "keyboard_shortcut_viewer_metadata.h",
    "ksv_export.h",
    "last_window_closed_observer.cc",
    "last_window_closed_observer.h",
    "shortcut_viewer_application.cc",
    "shortcut_viewer_application.h",
    "views/bubble_view.cc",
    "views/bubble_view.h",
    "views/keyboard_shortcut_item_list_view.cc",
    "views/keyboard_shortcut_item_list_view.h",
    "views/keyboard_shortcut_item_view.cc",
    "views/keyboard_shortcut_item_view.h",
    "views/keyboard_shortcut_view.cc",
    "views/keyboard_shortcut_view.h",
    "views/ksv_search_box_view.cc",
    "views/ksv_search_box_view.h",
  ]

  defines = [ "KSV_IMPLEMENTATION" ]

  deps = [
    "//ash/components/shortcut_viewer/public/mojom",
    "//ash/components/shortcut_viewer/vector_icons",
    "//ash/components/strings",
    "//ash/public/cpp",
    "//ash/public/cpp/resources:ash_public_unscaled_resources",
    "//cc/paint",
    "//services/service_manager/public/cpp/",
    "//ui/accessibility",
    "//ui/aura",
    "//ui/chromeos/events",
    "//ui/chromeos/search_box",
    "//ui/events:events_base",
    "//ui/events/devices",
    "//ui/events/ozone:events_ozone_layout",
    "//ui/views",
    "//ui/views/mus",
    "//ui/views/mus:resources",
  ]
}

service_manifest("manifest") {
  name = "shortcut_viewer_app"
  source = "manifest.json"
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "views/keyboard_shortcut_view_unittest.cc",
  ]
  deps = [
    ":lib",
    "//ash:test_support",
    "//base/test:test_support",
    "//services/ws/public/cpp/input_devices:test_support",
    "//testing/gtest",
    "//ui/events:test_support",
    "//ui/views",
  ]
}
