| Index: ui/ozone/platform/wayland/wayland_keyboard.cc
 | 
| diff --git a/ui/ozone/platform/wayland/wayland_keyboard.cc b/ui/ozone/platform/wayland/wayland_keyboard.cc
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..522259a05352de8c622a1104beb47ca43829cbf8
 | 
| --- /dev/null
 | 
| +++ b/ui/ozone/platform/wayland/wayland_keyboard.cc
 | 
| @@ -0,0 +1,91 @@
 | 
| +// Copyright 2016 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.
 | 
| +
 | 
| +#include "ui/ozone/platform/wayland/wayland_keyboard.h"
 | 
| +
 | 
| +#include <wayland-client.h>
 | 
| +
 | 
| +#include "ui/events/ozone/layout/keyboard_layout_engine_manager.h"
 | 
| +#include "ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.h"
 | 
| +#include "ui/ozone/platform/wayland/wayland_window.h"
 | 
| +
 | 
| +namespace ui {
 | 
| +
 | 
| +WaylandKeyboard::WaylandKeyboard(wl_keyboard* keyboard,
 | 
| +                                 const EventDispatchCallback& callback)
 | 
| +    : obj_(keyboard),
 | 
| +      evdev_(&modifiers_,
 | 
| +             KeyboardLayoutEngineManager::GetKeyboardLayoutEngine(),
 | 
| +             callback) {
 | 
| +  static const wl_keyboard_listener listener = {
 | 
| +      &WaylandKeyboard::Keymap,    &WaylandKeyboard::Enter,
 | 
| +      &WaylandKeyboard::Leave,     &WaylandKeyboard::Key,
 | 
| +      &WaylandKeyboard::Modifiers, &WaylandKeyboard::RepeatInfo,
 | 
| +  };
 | 
| +
 | 
| +  wl_keyboard_add_listener(obj_.get(), &listener, this);
 | 
| +  evdev_.SetAutoRepeatEnabled(true);
 | 
| +}
 | 
| +
 | 
| +WaylandKeyboard::~WaylandKeyboard() {}
 | 
| +
 | 
| +void WaylandKeyboard::Keymap(void* data,
 | 
| +                             wl_keyboard* obj,
 | 
| +                             uint32_t format,
 | 
| +                             int32_t fd,
 | 
| +                             uint32_t size) {
 | 
| +  // TODO(forney): Implement proper keymap handling.
 | 
| +  NOTIMPLEMENTED();
 | 
| +}
 | 
| +
 | 
| +void WaylandKeyboard::Enter(void* data,
 | 
| +                            wl_keyboard* obj,
 | 
| +                            uint32_t serial,
 | 
| +                            wl_surface* surface,
 | 
| +                            wl_array* keys) {
 | 
| +  WaylandWindow::FromSurface(surface)->set_keyboard_focus(true);
 | 
| +  // TODO(forney): The KeyboardEvdev object should update its state using the
 | 
| +  // passed key array.
 | 
| +}
 | 
| +
 | 
| +void WaylandKeyboard::Leave(void* data,
 | 
| +                            wl_keyboard* obj,
 | 
| +                            uint32_t serial,
 | 
| +                            wl_surface* surface) {
 | 
| +  WaylandWindow::FromSurface(surface)->set_keyboard_focus(false);
 | 
| +}
 | 
| +
 | 
| +void WaylandKeyboard::Key(void* data,
 | 
| +                          wl_keyboard* obj,
 | 
| +                          uint32_t serial,
 | 
| +                          uint32_t time,
 | 
| +                          uint32_t key,
 | 
| +                          uint32_t state) {
 | 
| +  WaylandKeyboard* keyboard = static_cast<WaylandKeyboard*>(data);
 | 
| +  keyboard->evdev_.OnKeyChange(key, state == WL_KEYBOARD_KEY_STATE_PRESSED,
 | 
| +                               false, base::TimeDelta::FromMilliseconds(time),
 | 
| +                               keyboard->obj_.id());
 | 
| +}
 | 
| +
 | 
| +void WaylandKeyboard::Modifiers(void* data,
 | 
| +                                wl_keyboard* obj,
 | 
| +                                uint32_t serial,
 | 
| +                                uint32_t mods_depressed,
 | 
| +                                uint32_t mods_latched,
 | 
| +                                uint32_t mods_locked,
 | 
| +                                uint32_t group) {
 | 
| +  // TODO(forney): Implement proper modifier handling.
 | 
| +  NOTIMPLEMENTED();
 | 
| +}
 | 
| +
 | 
| +void WaylandKeyboard::RepeatInfo(void* data,
 | 
| +                                 wl_keyboard* obj,
 | 
| +                                 int32_t rate,
 | 
| +                                 int32_t delay) {
 | 
| +  WaylandKeyboard* keyboard = static_cast<WaylandKeyboard*>(data);
 | 
| +  keyboard->evdev_.SetAutoRepeatRate(base::TimeDelta::FromMilliseconds(delay),
 | 
| +                                     base::TimeDelta::FromSeconds(1) / rate);
 | 
| +}
 | 
| +
 | 
| +}  // namespace ui
 | 
| 
 |