static void input_connected(struct XenDevice *xendev) { struct XenInput *in = container_of(xendev, struct XenInput, c.xendev); if (xenstore_read_fe_int(xendev, "request-abs-pointer", &in->abs_pointer_wanted) == -1) { in->abs_pointer_wanted = 0; } if (xenstore_read_fe_int(xendev, "request-raw-pointer", &in->raw_pointer_wanted) == -1) { in->raw_pointer_wanted = 0; } if (in->raw_pointer_wanted && in->abs_pointer_wanted == 0) { xen_pv_printf(xendev, 0, "raw pointer set without abs pointer"); } if (in->qkbd) { qemu_input_handler_unregister(in->qkbd); } if (in->qmou) { qemu_input_handler_unregister(in->qmou); } trace_xenfb_input_connected(xendev, in->abs_pointer_wanted); in->qkbd = qemu_input_handler_register((DeviceState *)in, &xenfb_keyboard); in->qmou = qemu_input_handler_register((DeviceState *)in, in->abs_pointer_wanted ? &xenfb_abs_mouse : &xenfb_rel_mouse); if (in->raw_pointer_wanted) { qemu_input_handler_activate(in->qkbd); qemu_input_handler_activate(in->qmou); } }
static void virtio_input_hid_change_active(VirtIOInput *vinput) { VirtIOInputHID *vhid = VIRTIO_INPUT_HID(vinput); if (vinput->active) { qemu_input_handler_activate(vhid->hs); } else { qemu_input_handler_deactivate(vhid->hs); } }