|
@@ -1872,12 +1872,16 @@ static void do_key_event(VncState *vs, int down, int keycode, int sym)
|
|
/* QEMU console switch */
|
|
/* QEMU console switch */
|
|
switch (qcode) {
|
|
switch (qcode) {
|
|
case Q_KEY_CODE_1 ... Q_KEY_CODE_9: /* '1' to '9' keys */
|
|
case Q_KEY_CODE_1 ... Q_KEY_CODE_9: /* '1' to '9' keys */
|
|
- if (vs->vd->dcl.con == NULL && down &&
|
|
|
|
|
|
+ if (down &&
|
|
qkbd_state_modifier_get(vs->vd->kbd, QKBD_MOD_CTRL) &&
|
|
qkbd_state_modifier_get(vs->vd->kbd, QKBD_MOD_CTRL) &&
|
|
qkbd_state_modifier_get(vs->vd->kbd, QKBD_MOD_ALT)) {
|
|
qkbd_state_modifier_get(vs->vd->kbd, QKBD_MOD_ALT)) {
|
|
- /* Reset the modifiers sent to the current console */
|
|
|
|
- qkbd_state_lift_all_keys(vs->vd->kbd);
|
|
|
|
- console_select(qcode - Q_KEY_CODE_1);
|
|
|
|
|
|
+ QemuConsole *con = qemu_console_lookup_by_index(qcode - Q_KEY_CODE_1);
|
|
|
|
+ if (con) {
|
|
|
|
+ unregister_displaychangelistener(&vs->vd->dcl);
|
|
|
|
+ qkbd_state_switch_console(vs->vd->kbd, con);
|
|
|
|
+ vs->vd->dcl.con = con;
|
|
|
|
+ register_displaychangelistener(&vs->vd->dcl);
|
|
|
|
+ }
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
default:
|
|
default:
|
|
@@ -4206,7 +4210,7 @@ void vnc_display_open(const char *id, Error **errp)
|
|
goto fail;
|
|
goto fail;
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- con = NULL;
|
|
|
|
|
|
+ con = qemu_console_lookup_default();
|
|
}
|
|
}
|
|
|
|
|
|
if (con != vd->dcl.con) {
|
|
if (con != vd->dcl.con) {
|