/* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "host/libs/wayland/wayland_seat.h" #include #include #include namespace wayland { namespace { void pointer_set_cursor(wl_client*, wl_resource* pointer, uint32_t serial, wl_resource* surface, int32_t x, int32_t y) { LOG(VERBOSE) << __FUNCTION__ << " pointer=" << pointer << " serial=" << serial << " surface=" << surface << " x=" << x << " y=" << y; } void pointer_release(wl_client*, wl_resource* pointer) { LOG(VERBOSE) << __FUNCTION__ << " pointer=" << pointer; wl_resource_destroy(pointer); } const struct wl_pointer_interface pointer_implementation = { .set_cursor = pointer_set_cursor, .release = pointer_release }; void keyboard_release(wl_client*, wl_resource* keyboard) { LOG(VERBOSE) << __FUNCTION__ << " keyboard=" << keyboard; wl_resource_destroy(keyboard); } const struct wl_keyboard_interface keyboard_implementation = { .release = keyboard_release }; void touch_release(wl_client*, wl_resource* touch) { LOG(VERBOSE) << __FUNCTION__ << " touch=" << touch; wl_resource_destroy(touch); } const struct wl_touch_interface touch_implementation = { .release = touch_release }; void pointer_destroy_resource_callback(struct wl_resource*) {} void seat_get_pointer(wl_client* client, wl_resource* seat, uint32_t id) { LOG(VERBOSE) << __FUNCTION__ << " seat=" << seat << " id=" << id; wl_resource* pointer_resource = wl_resource_create(client, &wl_pointer_interface, wl_resource_get_version(seat), id); wl_resource_set_implementation(pointer_resource, &pointer_implementation, nullptr, pointer_destroy_resource_callback); } void keyboard_destroy_resource_callback(struct wl_resource*) {} void seat_get_keyboard(wl_client* client, wl_resource* seat, uint32_t id) { LOG(VERBOSE) << __FUNCTION__ << " seat=" << seat << " id=" << id; wl_resource* keyboard_resource = wl_resource_create(client, &wl_keyboard_interface, wl_resource_get_version(seat), id); wl_resource_set_implementation(keyboard_resource, &keyboard_implementation, nullptr, keyboard_destroy_resource_callback); } void touch_destroy_resource_callback(struct wl_resource*) {} void seat_get_touch(wl_client* client, wl_resource* seat, uint32_t id) { LOG(VERBOSE) << __FUNCTION__ << " seat=" << seat << " id=" << id; wl_resource* touch_resource = wl_resource_create(client, &wl_touch_interface, wl_resource_get_version(seat), id); wl_resource_set_implementation(touch_resource, &touch_implementation, nullptr, touch_destroy_resource_callback); } void seat_release(wl_client*, wl_resource* resource) { LOG(VERBOSE) << __FUNCTION__ << " resource=" << resource; wl_resource_destroy(resource); } constexpr const uint32_t kSeatVersion = 6; const struct wl_seat_interface seat_implementation = { .get_pointer = seat_get_pointer, .get_keyboard = seat_get_keyboard, .get_touch = seat_get_touch, .release = seat_release }; void bind_seat(wl_client* client, void* data, uint32_t version, uint32_t id) { wl_resource* resource = wl_resource_create(client, &wl_seat_interface, std::min(version, kSeatVersion), id); wl_resource_set_implementation(resource, &seat_implementation, data, nullptr); } } // namespace void BindSeatInterface(wl_display* display) { wl_global_create(display, &wl_seat_interface, kSeatVersion, nullptr, bind_seat); } } // namespace wayland