From patchwork Wed Mar 20 09:43:41 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 229298 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 4621E2C00AB for ; Wed, 20 Mar 2013 20:55:53 +1100 (EST) Received: from localhost ([::1]:38151 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UIFkN-0005tk-CZ for incoming@patchwork.ozlabs.org; Wed, 20 Mar 2013 05:55:51 -0400 Received: from eggs.gnu.org ([208.118.235.92]:38257) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UIFYz-0004MI-65 for qemu-devel@nongnu.org; Wed, 20 Mar 2013 05:44:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UIFYl-0005oa-UC for qemu-devel@nongnu.org; Wed, 20 Mar 2013 05:44:05 -0400 Received: from mx1.redhat.com ([209.132.183.28]:59341) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UIFYl-0005nw-HE for qemu-devel@nongnu.org; Wed, 20 Mar 2013 05:43:51 -0400 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r2K9hoYq028247 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 20 Mar 2013 05:43:51 -0400 Received: from rincewind.home.kraxel.org (ovpn-116-26.ams2.redhat.com [10.36.116.26]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r2K9hl9D015049; Wed, 20 Mar 2013 05:43:49 -0400 Received: by rincewind.home.kraxel.org (Postfix, from userid 500) id A40F441FA5; Wed, 20 Mar 2013 10:43:47 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Wed, 20 Mar 2013 10:43:41 +0100 Message-Id: <1363772625-9182-20-git-send-email-kraxel@redhat.com> In-Reply-To: <1363772625-9182-1-git-send-email-kraxel@redhat.com> References: <1363772625-9182-1-git-send-email-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 209.132.183.28 Cc: Anthony Liguori , Gerd Hoffmann Subject: [Qemu-devel] [PATCH 19/23] console: add qemu_console_is_* X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Signed-off-by: Gerd Hoffmann --- include/ui/console.h | 6 +++-- ui/console.c | 59 ++++++++++++++++++++++++++++---------------------- ui/curses.c | 7 +++--- ui/sdl.c | 24 ++++++++++---------- ui/vnc.c | 6 ++--- 5 files changed, 56 insertions(+), 46 deletions(-) diff --git a/include/ui/console.h b/include/ui/console.h index 800f458..bcd0139 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -282,8 +282,10 @@ void graphic_hw_update(QemuConsole *con); void graphic_hw_invalidate(QemuConsole *con); void graphic_hw_text_update(QemuConsole *con, console_ch_t *chardata); -int is_graphic_console(void); -int is_fixedsize_console(void); +bool qemu_console_is_visible(QemuConsole *con); +bool qemu_console_is_graphic(QemuConsole *con); +bool qemu_console_is_fixedsize(QemuConsole *con); + void text_consoles_set_display(DisplayState *ds); void console_select(unsigned int index); void console_color_init(DisplayState *ds); diff --git a/ui/console.c b/ui/console.c index 51f9fac..0f2fea5 100644 --- a/ui/console.c +++ b/ui/console.c @@ -509,7 +509,7 @@ static void update_xy(QemuConsole *s, int x, int y) TextCell *c; int y1, y2; - if (s != active_console) { + if (!qemu_console_is_visible(s)) { return; } @@ -537,7 +537,7 @@ static void console_show_cursor(QemuConsole *s, int show) int y, y1; int x = s->x; - if (s != active_console) { + if (!qemu_console_is_visible(s)) { return; } @@ -573,8 +573,9 @@ static void console_refresh(QemuConsole *s) TextCell *c; int x, y, y1; - if (s != active_console) + if (!qemu_console_is_visible(s)) { return; + } if (s->ds->have_text) { s->text_x[0] = 0; @@ -605,15 +606,10 @@ static void console_refresh(QemuConsole *s) } } -static void console_scroll(int ydelta) +static void console_scroll(QemuConsole *s, int ydelta) { - QemuConsole *s; int i, y1; - s = active_console; - if (!s || (s->console_type == GRAPHIC_CONSOLE)) - return; - if (ydelta > 0) { for(i = 0; i < ydelta; i++) { if (s->y_displayed == s->y_base) @@ -663,7 +659,7 @@ static void console_put_lf(QemuConsole *s) c->t_attrib = s->t_attrib_default; c++; } - if (s == active_console && s->y_displayed == s->y_base) { + if (qemu_console_is_visible(s) && s->y_displayed == s->y_base) { if (s->ds->have_text) { s->text_x[0] = 0; s->text_y[0] = 0; @@ -1106,16 +1102,16 @@ void kbd_put_keysym(int keysym) switch(keysym) { case QEMU_KEY_CTRL_UP: - console_scroll(-1); + console_scroll(s, -1); break; case QEMU_KEY_CTRL_DOWN: - console_scroll(1); + console_scroll(s, 1); break; case QEMU_KEY_CTRL_PAGEUP: - console_scroll(-10); + console_scroll(s, -10); break; case QEMU_KEY_CTRL_PAGEDOWN: - console_scroll(10); + console_scroll(s, 10); break; default: /* convert the QEMU keysym to VT100 key string */ @@ -1332,7 +1328,7 @@ void dpy_gfx_update(QemuConsole *con, int x, int y, int w, int h) w = MIN(w, width - x); h = MIN(h, height - y); - if (con != active_console) { + if (!qemu_console_is_visible(con)) { return; } QLIST_FOREACH(dcl, &s->listeners, next) { @@ -1361,7 +1357,7 @@ void dpy_gfx_replace_surface(QemuConsole *con, DisplaySurface *old_surface = con->surface; con->surface = surface; - if (con == active_console) { + if (qemu_console_is_visible(con)) { dpy_gfx_switch_surface(s, surface); } qemu_free_displaysurface(old_surface); @@ -1383,7 +1379,7 @@ void dpy_gfx_copy(QemuConsole *con, int src_x, int src_y, DisplayState *s = con->ds; struct DisplayChangeListener *dcl; - if (con != active_console) { + if (!qemu_console_is_visible(con)) { return; } QLIST_FOREACH(dcl, &s->listeners, next) { @@ -1400,7 +1396,7 @@ void dpy_text_cursor(QemuConsole *con, int x, int y) DisplayState *s = con->ds; struct DisplayChangeListener *dcl; - if (con != active_console) { + if (!qemu_console_is_visible(con)) { return; } QLIST_FOREACH(dcl, &s->listeners, next) { @@ -1415,7 +1411,7 @@ void dpy_text_update(QemuConsole *con, int x, int y, int w, int h) DisplayState *s = con->ds; struct DisplayChangeListener *dcl; - if (con != active_console) { + if (!qemu_console_is_visible(con)) { return; } QLIST_FOREACH(dcl, &s->listeners, next) { @@ -1430,7 +1426,7 @@ void dpy_text_resize(QemuConsole *con, int w, int h) DisplayState *s = con->ds; struct DisplayChangeListener *dcl; - if (con != active_console) { + if (!qemu_console_is_visible(con)) { return; } QLIST_FOREACH(dcl, &s->listeners, next) { @@ -1445,7 +1441,7 @@ void dpy_mouse_set(QemuConsole *con, int x, int y, int on) DisplayState *s = con->ds; struct DisplayChangeListener *dcl; - if (con != active_console) { + if (!qemu_console_is_visible(con)) { return; } QLIST_FOREACH(dcl, &s->listeners, next) { @@ -1460,7 +1456,7 @@ void dpy_cursor_define(QemuConsole *con, QEMUCursor *cursor) DisplayState *s = con->ds; struct DisplayChangeListener *dcl; - if (con != active_console) { + if (!qemu_console_is_visible(con)) { return; } QLIST_FOREACH(dcl, &s->listeners, next) { @@ -1534,14 +1530,25 @@ QemuConsole *graphic_console_init(const GraphicHwOps *hw_ops, return s; } -int is_graphic_console(void) +bool qemu_console_is_visible(QemuConsole *con) { - return active_console && active_console->console_type == GRAPHIC_CONSOLE; + return con == active_console; } -int is_fixedsize_console(void) +bool qemu_console_is_graphic(QemuConsole *con) { - return active_console && active_console->console_type != TEXT_CONSOLE; + if (con == NULL) { + con = active_console; + } + return con && (con->console_type == GRAPHIC_CONSOLE); +} + +bool qemu_console_is_fixedsize(QemuConsole *con) +{ + if (con == NULL) { + con = active_console; + } + return con && (con->console_type != TEXT_CONSOLE); } static void text_console_set_echo(CharDriverState *chr, bool echo) diff --git a/ui/curses.c b/ui/curses.c index ed9e65c..a85a7da 100644 --- a/ui/curses.c +++ b/ui/curses.c @@ -56,7 +56,7 @@ static void curses_update(DisplayChangeListener *dcl, static void curses_calc_pad(void) { - if (is_fixedsize_console()) { + if (qemu_console_is_fixedsize(NULL)) { width = gwidth; height = gheight; } else { @@ -143,8 +143,9 @@ static void curses_cursor_position(DisplayChangeListener *dcl, curs_set(1); /* it seems that curs_set(1) must always be called before * curs_set(2) for the latter to have effect */ - if (!is_graphic_console()) + if (!qemu_console_is_graphic(NULL)) { curs_set(2); + } return; } } @@ -252,7 +253,7 @@ static void curses_refresh(DisplayChangeListener *dcl) if (keycode == -1) continue; - if (is_graphic_console()) { + if (qemu_console_is_graphic(NULL)) { /* since terminals don't know about key press and release * events, we need to emit both for each key received */ if (keycode & SHIFT) diff --git a/ui/sdl.c b/ui/sdl.c index 97764a6..c9f2928 100644 --- a/ui/sdl.c +++ b/ui/sdl.c @@ -358,7 +358,7 @@ static void sdl_show_cursor(void) if (!cursor_hide) return; - if (!kbd_mouse_is_absolute() || !is_graphic_console()) { + if (!kbd_mouse_is_absolute() || !qemu_console_is_graphic(NULL)) { SDL_ShowCursor(1); if (guest_cursor && (gui_grab || kbd_mouse_is_absolute() || absolute_enabled)) @@ -413,7 +413,7 @@ static void sdl_mouse_mode_change(Notifier *notify, void *data) if (kbd_mouse_is_absolute()) { if (!absolute_enabled) { absolute_enabled = 1; - if (is_graphic_console()) { + if (qemu_console_is_graphic(NULL)) { absolute_mouse_grab(); } } @@ -488,7 +488,7 @@ static void toggle_full_screen(void) } else { do_sdl_resize(width, height, 0); } - if (!gui_saved_grab || !is_graphic_console()) { + if (!gui_saved_grab || !qemu_console_is_graphic(NULL)) { sdl_grab_end(); } } @@ -535,7 +535,7 @@ static void handle_keydown(SDL_Event *ev) if (gui_fullscreen) { break; } - if (!is_graphic_console()) { + if (!qemu_console_is_graphic(NULL)) { /* release grab if going to a text console */ if (gui_grab) { sdl_grab_end(); @@ -563,7 +563,7 @@ static void handle_keydown(SDL_Event *ev) default: break; } - } else if (!is_graphic_console()) { + } else if (!qemu_console_is_graphic(NULL)) { int keysym = 0; if (ev->key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) { @@ -637,7 +637,7 @@ static void handle_keydown(SDL_Event *ev) kbd_put_keysym(ev->key.keysym.unicode); } } - if (is_graphic_console() && !gui_keysym) { + if (qemu_console_is_graphic(NULL) && !gui_keysym) { sdl_process_key(&ev->key); } } @@ -656,7 +656,7 @@ static void handle_keyup(SDL_Event *ev) if (gui_keysym == 0) { /* exit/enter grab if pressing Ctrl-Alt */ if (!gui_grab) { - if (is_graphic_console()) { + if (qemu_console_is_graphic(NULL)) { sdl_grab_start(); } } else if (!gui_fullscreen) { @@ -669,7 +669,7 @@ static void handle_keyup(SDL_Event *ev) } gui_keysym = 0; } - if (is_graphic_console() && !gui_keysym) { + if (qemu_console_is_graphic(NULL) && !gui_keysym) { sdl_process_key(&ev->key); } } @@ -678,7 +678,7 @@ static void handle_mousemotion(SDL_Event *ev) { int max_x, max_y; - if (is_graphic_console() && + if (qemu_console_is_graphic(NULL) && (kbd_mouse_is_absolute() || absolute_enabled)) { max_x = real_screen->w - 1; max_y = real_screen->h - 1; @@ -704,7 +704,7 @@ static void handle_mousebutton(SDL_Event *ev) SDL_MouseButtonEvent *bev; int dz; - if (!is_graphic_console()) { + if (!qemu_console_is_graphic(NULL)) { return; } @@ -744,7 +744,7 @@ static void handle_activation(SDL_Event *ev) sdl_grab_end(); } #endif - if (!gui_grab && ev->active.gain && is_graphic_console() && + if (!gui_grab && ev->active.gain && qemu_console_is_graphic(NULL) && (kbd_mouse_is_absolute() || absolute_enabled)) { absolute_mouse_grab(); } @@ -771,7 +771,7 @@ static void sdl_refresh(DisplayChangeListener *dcl) } graphic_hw_update(NULL); - SDL_EnableUNICODE(!is_graphic_console()); + SDL_EnableUNICODE(!qemu_console_is_graphic(NULL)); while (SDL_PollEvent(ev)) { switch (ev->type) { diff --git a/ui/vnc.c b/ui/vnc.c index ad91a7b..b01180d 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -1609,7 +1609,7 @@ static void do_key_event(VncState *vs, int down, int keycode, int sym) } } - if (is_graphic_console()) { + if (qemu_console_is_graphic(NULL)) { if (keycode & SCANCODE_GREY) kbd_put_keycode(SCANCODE_EMUL0); if (down) @@ -1728,7 +1728,7 @@ static void vnc_release_modifiers(VncState *vs) }; int i, keycode; - if (!is_graphic_console()) { + if (!qemu_console_is_graphic(NULL)) { return; } for (i = 0; i < ARRAY_SIZE(keycodes); i++) { @@ -1748,7 +1748,7 @@ static void key_event(VncState *vs, int down, uint32_t sym) int keycode; int lsym = sym; - if (lsym >= 'A' && lsym <= 'Z' && is_graphic_console()) { + if (lsym >= 'A' && lsym <= 'Z' && qemu_console_is_graphic(NULL)) { lsym = lsym - 'A' + 'a'; }