Move the xenfb pointer handler to the connected method
Ensure that we read "request-abs-pointer" after the frontend has written it. This means that we will correctly set up an ansolute or relative pointer handler correctly. Signed-off-by: John Haxby <john.haxby@oracle.com> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
This commit is contained in:
parent
384087b2fe
commit
6d6467305a
21
hw/xenfb.c
21
hw/xenfb.c
|
@ -356,10 +356,6 @@ static int input_initialise(struct XenDevice *xendev)
|
||||||
struct XenInput *in = container_of(xendev, struct XenInput, c.xendev);
|
struct XenInput *in = container_of(xendev, struct XenInput, c.xendev);
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
if (xenstore_read_fe_int(xendev, "request-abs-pointer",
|
|
||||||
&in->abs_pointer_wanted) == -1)
|
|
||||||
in->abs_pointer_wanted = 0;
|
|
||||||
|
|
||||||
if (!in->c.ds) {
|
if (!in->c.ds) {
|
||||||
char *vfb = xenstore_read_str(NULL, "device/vfb");
|
char *vfb = xenstore_read_str(NULL, "device/vfb");
|
||||||
if (vfb == NULL) {
|
if (vfb == NULL) {
|
||||||
|
@ -377,10 +373,24 @@ static int input_initialise(struct XenDevice *xendev)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
qemu_add_kbd_event_handler(xenfb_key_event, in);
|
qemu_add_kbd_event_handler(xenfb_key_event, in);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
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 (in->qmouse) {
|
||||||
|
qemu_remove_mouse_event_handler(in->qmouse);
|
||||||
|
}
|
||||||
in->qmouse = qemu_add_mouse_event_handler(xenfb_mouse_event, in,
|
in->qmouse = qemu_add_mouse_event_handler(xenfb_mouse_event, in,
|
||||||
in->abs_pointer_wanted,
|
in->abs_pointer_wanted,
|
||||||
"Xen PVFB Mouse");
|
"Xen PVFB Mouse");
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void input_disconnect(struct XenDevice *xendev)
|
static void input_disconnect(struct XenDevice *xendev)
|
||||||
|
@ -960,6 +970,7 @@ struct XenDevOps xen_kbdmouse_ops = {
|
||||||
.size = sizeof(struct XenInput),
|
.size = sizeof(struct XenInput),
|
||||||
.init = input_init,
|
.init = input_init,
|
||||||
.initialise = input_initialise,
|
.initialise = input_initialise,
|
||||||
|
.connected = input_connected,
|
||||||
.disconnect = input_disconnect,
|
.disconnect = input_disconnect,
|
||||||
.event = input_event,
|
.event = input_event,
|
||||||
};
|
};
|
||||||
|
|
Reference in New Issue