}
vnc_remove_timer(vs->vd);
+ qemu_remove_led_event_handler(vs->led);
qemu_free(vs);
}
kbd_put_keycode(keycode | SCANCODE_UP);
}
+static void kbd_leds(void *opaque, int ledstate)
+{
+ VncState *vs = opaque;
+ int caps, num;
+
+ caps = ledstate & QEMU_CAPS_LOCK_LED ? 1 : 0;
+ num = ledstate & QEMU_NUM_LOCK_LED ? 1 : 0;
+
+ if (vs->modifiers_state[0x3a] != caps) {
+ vs->modifiers_state[0x3a] = caps;
+ }
+ if (vs->modifiers_state[0x45] != num) {
+ vs->modifiers_state[0x45] = num;
+ }
+}
+
static void do_key_event(VncState *vs, int down, int keycode, int sym)
{
/* QEMU console switch */
break;
case 0x3a: /* CapsLock */
case 0x45: /* NumLock */
- if (!down)
+ if (down)
vs->modifiers_state[keycode] ^= 1;
break;
}
vnc_flush(vs);
vnc_read_when(vs, protocol_version, 12);
reset_keys(vs);
+ vs->led = qemu_add_led_event_handler(kbd_leds, vs);
vnc_init_timer(vd);