END_TEST START_TEST(udev_create_seat0) { struct libinput *li; struct libinput_event *event; struct udev *udev; int fd; udev = udev_new(); ck_assert(udev != NULL); li = libinput_create_from_udev(&simple_interface, NULL, udev, "seat0"); ck_assert(li != NULL); fd = libinput_get_fd(li); ck_assert_int_ge(fd, 0); /* expect at least one event */ libinput_dispatch(li); event = libinput_get_event(li); ck_assert(event != NULL); libinput_event_destroy(event); libinput_destroy(li); udev_unref(udev); }
END_TEST START_TEST(udev_create_empty_seat) { struct libinput *li; struct libinput_event *event; struct udev *udev; int fd; udev = udev_new(); ck_assert(udev != NULL); /* expect a libinput reference, but no events */ li = libinput_create_from_udev(&simple_interface, NULL, udev, "seatdoesntexist"); ck_assert(li != NULL); fd = libinput_get_fd(li); ck_assert_int_ge(fd, 0); libinput_dispatch(li); event = libinput_get_event(li); ck_assert(event == NULL); libinput_event_destroy(event); libinput_destroy(li); udev_unref(udev); }
END_TEST START_TEST(udev_double_resume) { struct libinput *li; struct libinput_event *event; struct udev *udev; int fd; udev = udev_new(); ck_assert(udev != NULL); li = libinput_udev_create_context(&simple_interface, NULL, udev); ck_assert(li != NULL); ck_assert_int_eq(libinput_udev_assign_seat(li, "seat0"), 0); fd = libinput_get_fd(li); ck_assert_int_ge(fd, 0); /* expect at least one event */ ck_assert_int_ge(libinput_dispatch(li), 0); event = libinput_get_event(li); ck_assert(event != NULL); libinput_suspend(li); libinput_resume(li); libinput_resume(li); libinput_event_destroy(event); libinput_unref(li); udev_unref(udev); }
static bool input_set_event_loop(struct wl_event_loop *loop) { if (input.event_source) { wl_event_source_remove(input.event_source); input.event_source = NULL; } if (input.handle && loop && !(input.event_source = wl_event_loop_add_fd(loop, libinput_get_fd(input.handle), WL_EVENT_READABLE, input_event, &input))) return false; return true; }
LibinputServer::LibinputServer() : m_keyboardEventHandler(Input::KeyboardEventHandler::create()) , m_keyboardEventRepeating(new Input::KeyboardEventRepeating(*this)) , m_pointerCoords(0, 0) , m_pointerBounds(1, 1) #ifdef KEY_INPUT_HANDLING_VIRTUAL , m_virtualkeyboard(nullptr) #endif { m_udev = udev_new(); if (!m_udev) return; m_libinput = libinput_udev_create_context(&g_interface, nullptr, m_udev); if (!m_libinput) return; int ret = libinput_udev_assign_seat(m_libinput, "seat0"); if (ret) return; GSource* baseSource = g_source_new(&EventSource::s_sourceFuncs, sizeof(EventSource)); auto* source = reinterpret_cast<EventSource*>(baseSource); source->pfd.fd = libinput_get_fd(m_libinput); source->pfd.events = G_IO_IN | G_IO_ERR | G_IO_HUP; source->pfd.revents = 0; g_source_add_poll(baseSource, &source->pfd); source->server = this; g_source_set_name(baseSource, "[WPE] libinput"); g_source_set_priority(baseSource, G_PRIORITY_DEFAULT); g_source_attach(baseSource, g_main_context_get_thread_default()); #ifdef KEY_INPUT_HANDLING_VIRTUAL const char listenerName[] = "WebKitBrowser"; m_virtualkeyboard = Construct(listenerName, connectorName, VirtualKeyboardCallback); if (m_virtualkeyboard == nullptr) { fprintf(stderr, "[LibinputServer] Initialization of virtual keyboard failed!!!\n"); } else { fprintf(stderr, "[LibinputServer] Initialization of virtual keyboard and linux input system succeeded.\n"); } #else fprintf(stderr, "[LibinputServer] Initialization of linux input system succeeded.\n"); #endif }
bool LibInputHandler::Open() { if ((nullptr != udev_context) || (nullptr != li_if) || (nullptr != li) || fd.IsDefined()) return false; if (nullptr == udev_context) { udev_context = new UdevContext(UdevContext::NewRef()); if ((nullptr == udev_context) || (nullptr == udev_context->Get())) { return false; } } li_if = new libinput_interface; assert(li_if); li_if->open_restricted = [](const char *path, int flags, void* user_data) -> int { return reinterpret_cast<LibInputHandler*>(user_data)->OpenDevice(path, flags); }; li_if->close_restricted = [](int fd, void* user_data) { reinterpret_cast<LibInputHandler*>(user_data)->CloseDevice(fd); }; li = libinput_udev_create_context(li_if, this, udev_context->Get()); if (nullptr == li) return false; int assign_seat_ret = libinput_udev_assign_seat(li, UDEV_DEFAULT_SEAT); if (0 != assign_seat_ret) return false; fd.Set(libinput_get_fd(li)); if (!fd.IsDefined()) return false; io_loop.Add(fd, io_loop.READ, *this); return true; }