input: make vnc use mouse mode notifiers
When we switch to absolute mode, we send out a notification (if the client supports it). Today, we only send this notification when the client sends us a mouse event and we're in the wrong mode. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
1aaee43cf7
commit
37c34d9d5d
13
vnc.c
13
vnc.c
@ -1109,6 +1109,7 @@ static void vnc_disconnect_finish(VncState *vs)
|
|||||||
dcl->idle = 1;
|
dcl->idle = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qemu_remove_mouse_mode_change_notifier(&vs->mouse_mode_notifier);
|
||||||
vnc_remove_timer(vs->vd);
|
vnc_remove_timer(vs->vd);
|
||||||
if (vs->vd->lock_key_sync)
|
if (vs->vd->lock_key_sync)
|
||||||
qemu_remove_led_event_handler(vs->led);
|
qemu_remove_led_event_handler(vs->led);
|
||||||
@ -1427,8 +1428,11 @@ static void client_cut_text(VncState *vs, size_t len, uint8_t *text)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static void check_pointer_type_change(VncState *vs, int absolute)
|
static void check_pointer_type_change(Notifier *notifier)
|
||||||
{
|
{
|
||||||
|
VncState *vs = container_of(notifier, VncState, mouse_mode_notifier);
|
||||||
|
int absolute = kbd_mouse_is_absolute();
|
||||||
|
|
||||||
if (vnc_has_feature(vs, VNC_FEATURE_POINTER_TYPE_CHANGE) && vs->absolute != absolute) {
|
if (vnc_has_feature(vs, VNC_FEATURE_POINTER_TYPE_CHANGE) && vs->absolute != absolute) {
|
||||||
vnc_write_u8(vs, 0);
|
vnc_write_u8(vs, 0);
|
||||||
vnc_write_u8(vs, 0);
|
vnc_write_u8(vs, 0);
|
||||||
@ -1476,8 +1480,6 @@ static void pointer_event(VncState *vs, int button_mask, int x, int y)
|
|||||||
vs->last_x = x;
|
vs->last_x = x;
|
||||||
vs->last_y = y;
|
vs->last_y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
check_pointer_type_change(vs, kbd_mouse_is_absolute());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reset_keys(VncState *vs)
|
static void reset_keys(VncState *vs)
|
||||||
@ -1818,8 +1820,6 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
check_pointer_type_change(vs, kbd_mouse_is_absolute());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_pixel_conversion(VncState *vs)
|
static void set_pixel_conversion(VncState *vs)
|
||||||
@ -2436,6 +2436,9 @@ static void vnc_connect(VncDisplay *vd, int csock)
|
|||||||
if (vs->vd->lock_key_sync)
|
if (vs->vd->lock_key_sync)
|
||||||
vs->led = qemu_add_led_event_handler(kbd_leds, vs);
|
vs->led = qemu_add_led_event_handler(kbd_leds, vs);
|
||||||
|
|
||||||
|
vs->mouse_mode_notifier.notify = check_pointer_type_change;
|
||||||
|
qemu_add_mouse_mode_change_notifier(&vs->mouse_mode_notifier);
|
||||||
|
|
||||||
vnc_init_timer(vd);
|
vnc_init_timer(vd);
|
||||||
|
|
||||||
/* vs might be free()ed here */
|
/* vs might be free()ed here */
|
||||||
|
Loading…
Reference in New Issue
Block a user