From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38839) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WrTMv-0005UN-4v for qemu-devel@nongnu.org; Mon, 02 Jun 2014 10:37:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WrTMn-0000Zq-7z for qemu-devel@nongnu.org; Mon, 02 Jun 2014 10:37:45 -0400 Received: from mx1.redhat.com ([209.132.183.28]:27172) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WrTMm-0000ZX-Vu for qemu-devel@nongnu.org; Mon, 02 Jun 2014 10:37:37 -0400 From: Gerd Hoffmann Date: Mon, 2 Jun 2014 16:37:30 +0200 Message-Id: <1401719850-16998-5-git-send-email-kraxel@redhat.com> In-Reply-To: <1401719850-16998-1-git-send-email-kraxel@redhat.com> References: <1401719850-16998-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PULL 4/4] sdl2: textinput + terminal List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Gerd Hoffmann , Anthony Liguori Signed-off-by: Gerd Hoffmann --- ui/sdl2.c | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/ui/sdl2.c b/ui/sdl2.c index 749fa89..fcac87b 100644 --- a/ui/sdl2.c +++ b/ui/sdl2.c @@ -214,6 +214,23 @@ static void sdl_process_key(struct sdl2_state *scon, int qcode = sdl2_scancode_to_qcode[ev->keysym.scancode]; QemuConsole *con = scon ? scon->dcl.con : NULL; + if (!qemu_console_is_graphic(con)) { + if (ev->type == SDL_KEYDOWN) { + switch (ev->keysym.scancode) { + case SDL_SCANCODE_RETURN: + kbd_put_keysym_console(con, '\n'); + break; + case SDL_SCANCODE_BACKSPACE: + kbd_put_keysym_console(con, QEMU_KEY_BACKSPACE); + break; + default: + kbd_put_qcode_console(con, qcode); + break; + } + } + return; + } + switch (ev->keysym.scancode) { #if 0 case SDL_SCANCODE_NUMLOCKCLEAR: @@ -309,6 +326,11 @@ static void sdl_show_cursor(void) static void sdl_grab_start(struct sdl2_state *scon) { + QemuConsole *con = scon ? scon->dcl.con : NULL; + + if (!con || !qemu_console_is_graphic(con)) { + return; + } /* * If the application is not active, do not try to enter grab state. This * prevents 'SDL_WM_GrabInput(SDL_GRAB_ON)' from blocking all the @@ -569,6 +591,17 @@ static void handle_keyup(SDL_Event *ev) } } +static void handle_textinput(SDL_Event *ev) +{ + struct sdl2_state *scon = get_scon_from_window(ev->key.windowID); + QemuConsole *con = scon ? scon->dcl.con : NULL; + + if (qemu_console_is_graphic(con)) { + return; + } + kbd_put_string_console(con, ev->text.text, strlen(ev->text.text)); +} + static void handle_mousemotion(SDL_Event *ev) { int max_x, max_y; @@ -705,6 +738,9 @@ static void sdl_refresh(DisplayChangeListener *dcl) case SDL_KEYUP: handle_keyup(ev); break; + case SDL_TEXTINPUT: + handle_textinput(ev); + break; case SDL_QUIT: if (!no_quit) { no_shutdown = 0; @@ -833,7 +869,7 @@ void sdl_display_init(DisplayState *ds, int full_screen, int no_frame) for (i = 0;; i++) { QemuConsole *con = qemu_console_lookup_by_index(i); - if (!con || !qemu_console_is_graphic(con)) { + if (!con) { break; } } @@ -841,6 +877,9 @@ void sdl_display_init(DisplayState *ds, int full_screen, int no_frame) sdl2_console = g_new0(struct sdl2_state, sdl2_num_outputs); for (i = 0; i < sdl2_num_outputs; i++) { QemuConsole *con = qemu_console_lookup_by_index(i); + if (!qemu_console_is_graphic(con)) { + sdl2_console[i].hidden = true; + } sdl2_console[i].dcl.ops = &dcl_ops; sdl2_console[i].dcl.con = con; register_displaychangelistener(&sdl2_console[i].dcl); -- 1.8.3.1