1 // Copyright 2013 Intel Corporation. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ozone/wayland/input/keyboard.h"
7 #include "ozone/ui/events/event_factory_ozone_wayland.h"
9 namespace ozonewayland {
11 WaylandKeyboard::WaylandKeyboard() : input_keyboard_(NULL),
15 WaylandKeyboard::~WaylandKeyboard() {
17 wl_keyboard_destroy(input_keyboard_);
20 void WaylandKeyboard::OnSeatCapabilities(wl_seat *seat, uint32_t caps) {
21 static const struct wl_keyboard_listener kInputKeyboardListener = {
22 WaylandKeyboard::OnKeyboardKeymap,
23 WaylandKeyboard::OnKeyboardEnter,
24 WaylandKeyboard::OnKeyboardLeave,
25 WaylandKeyboard::OnKeyNotify,
26 WaylandKeyboard::OnKeyModifiers,
29 dispatcher_ = ui::EventFactoryOzoneWayland::GetInstance()->EventConverter();
31 if ((caps & WL_SEAT_CAPABILITY_KEYBOARD) && !input_keyboard_) {
32 input_keyboard_ = wl_seat_get_keyboard(seat);
33 wl_keyboard_add_listener(input_keyboard_, &kInputKeyboardListener,
38 void WaylandKeyboard::OnKeyNotify(void* data,
39 wl_keyboard* input_keyboard,
44 WaylandKeyboard* device = static_cast<WaylandKeyboard*>(data);
45 ui::EventType type = ui::ET_KEY_PRESSED;
46 WaylandDisplay::GetInstance()->SetSerial(serial);
47 if (state == WL_KEYBOARD_KEY_STATE_RELEASED)
48 type = ui::ET_KEY_RELEASED;
50 device->dispatcher_->KeyNotify(type, key);
53 void WaylandKeyboard::OnKeyboardKeymap(void *data,
54 struct wl_keyboard *keyboard,
58 WaylandKeyboard* device = static_cast<WaylandKeyboard*>(data);
65 if (format != WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1) {
70 base::SharedMemoryHandle section = base::FileDescriptor(fd, true);
71 device->dispatcher_->InitializeXKB(section, size);
74 void WaylandKeyboard::OnKeyboardEnter(void* data,
75 wl_keyboard* input_keyboard,
79 WaylandDisplay::GetInstance()->SetSerial(serial);
82 void WaylandKeyboard::OnKeyboardLeave(void* data,
83 wl_keyboard* input_keyboard,
85 wl_surface* surface) {
86 WaylandDisplay::GetInstance()->SetSerial(serial);
89 void WaylandKeyboard::OnKeyModifiers(void *data,
90 wl_keyboard *keyboard,
92 uint32_t mods_depressed,
93 uint32_t mods_latched,
96 WaylandKeyboard* device = static_cast<WaylandKeyboard*>(data);
97 device->dispatcher_->KeyModifiers(mods_depressed,
103 } // namespace ozonewayland