static void gdk_display_handle_global(struct wl_display *display, uint32_t id, const char *interface, uint32_t version, void *data) { GdkDisplayWayland *display_wayland = data; GdkDisplay *gdk_display = GDK_DISPLAY_OBJECT (data); struct wl_input_device *input; if (strcmp(interface, "wl_compositor") == 0) { display_wayland->compositor = wl_compositor_create(display, id, 1); wl_compositor_add_listener(display_wayland->compositor, &compositor_listener, display_wayland); } else if (strcmp(interface, "wl_shm") == 0) { display_wayland->shm = wl_shm_create(display, id, 1); } else if (strcmp(interface, "wl_shell") == 0) { display_wayland->shell = wl_shell_create(display, id, 1); wl_shell_add_listener(display_wayland->shell, &shell_listener, display_wayland); } else if (strcmp(interface, "wl_output") == 0) { display_wayland->output = wl_output_create(display, id, 1); wl_output_add_listener(display_wayland->output, &output_listener, display_wayland); } else if (strcmp(interface, "wl_input_device") == 0) { input = wl_input_device_create(display, id, 1); _gdk_wayland_device_manager_add_device (gdk_display->device_manager, input); } }
static void display_add_input(struct display *d, uint32_t id) { struct input *input; input = malloc(sizeof *input); if (input == NULL) return; memset(input, 0, sizeof *input); input->display = d; input->input_device = wl_input_device_create(d->display, id); input->pointer_focus = NULL; input->keyboard_focus = NULL; wl_list_insert(d->input_list.prev, &input->link); wl_input_device_add_listener(input->input_device, &input_device_listener, input); wl_input_device_set_user_data(input->input_device, input); }
QWaylandInputDevice::QWaylandInputDevice(struct wl_display *display, uint32_t id) : mDisplay(display) , mInputDevice(wl_input_device_create(display, id, 1)) , mPointerFocus(NULL) , mKeyboardFocus(NULL) , mButtons(0) { wl_input_device_add_listener(mInputDevice, &inputDeviceListener, this); wl_input_device_set_user_data(mInputDevice, this); #ifndef QT_NO_WAYLAND_XKB struct xkb_rule_names names; names.rules = "evdev"; names.model = "pc105"; names.layout = "us"; names.variant = ""; names.options = ""; mXkb = xkb_compile_keymap_from_rules(&names); #endif }