aboutsummaryrefslogtreecommitdiff
path: root/hw/xenfb.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/xenfb.c')
-rw-r--r--hw/xenfb.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/hw/xenfb.c b/hw/xenfb.c
index d532d3e898..1bcf171b01 100644
--- a/hw/xenfb.c
+++ b/hw/xenfb.c
@@ -351,15 +351,11 @@ static int input_init(struct XenDevice *xendev)
return 0;
}
-static int input_connect(struct XenDevice *xendev)
+static int input_initialise(struct XenDevice *xendev)
{
struct XenInput *in = container_of(xendev, struct XenInput, c.xendev);
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) {
char *vfb = xenstore_read_str(NULL, "device/vfb");
if (vfb == NULL) {
@@ -377,10 +373,24 @@ static int input_connect(struct XenDevice *xendev)
return rc;
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->abs_pointer_wanted,
"Xen PVFB Mouse");
- return 0;
}
static void input_disconnect(struct XenDevice *xendev)
@@ -865,7 +875,7 @@ static int fb_init(struct XenDevice *xendev)
return 0;
}
-static int fb_connect(struct XenDevice *xendev)
+static int fb_initialise(struct XenDevice *xendev)
{
struct XenFB *fb = container_of(xendev, struct XenFB, c.xendev);
struct xenfb_page *fb_page;
@@ -959,7 +969,8 @@ static void fb_event(struct XenDevice *xendev)
struct XenDevOps xen_kbdmouse_ops = {
.size = sizeof(struct XenInput),
.init = input_init,
- .connect = input_connect,
+ .initialise = input_initialise,
+ .connected = input_connected,
.disconnect = input_disconnect,
.event = input_event,
};
@@ -967,7 +978,7 @@ struct XenDevOps xen_kbdmouse_ops = {
struct XenDevOps xen_framebuffer_ops = {
.size = sizeof(struct XenFB),
.init = fb_init,
- .connect = fb_connect,
+ .initialise = fb_initialise,
.disconnect = fb_disconnect,
.event = fb_event,
.frontend_changed = fb_frontend_changed,