* andrzej zaborowski <[EMAIL PROTECTED]> [2008-08-22 17:40]: > 2008/8/22 Ryan Harper <[EMAIL PROTECTED]>: > > The current console output is broken in curses mode size the default > > starting > > size might not match the launching terminal size. Change initial size to be > > based on the terminal. Also, resize events fail to ensure that both the > > text > > console and curses display areas are the same size; this causes broken > > output > > like: > > > > QEMU 0.9.1 monitor - type 'help' for more information > > (qemu) > > (qemu) > > (qemu) > > > > To fix this, ensure that the display width and the text area width are sync > > for > > text consoles on refresh; also force a resize event whenever we invalidate > > the > > text console. > > > > Signed-off-by: Ryan Harper <[EMAIL PROTECTED]> > > > > diff --git a/console.c b/console.c > > index 1c94980..89bdc52 100644 > > --- a/console.c > > +++ b/console.c > > @@ -608,6 +608,9 @@ static void console_refresh(TextConsole *s) > > s->text_y[0] = 0; > > s->text_x[1] = s->width - 1; > > s->text_y[1] = s->height - 1; > > + /* ensure that textconsole area is the same size as the display */ > > + s->g_width = s->ds->width; > > + s->g_height = s->ds->height; > > s->cursor_invalidate = 1; > > return; > > } > > @@ -1158,6 +1161,8 @@ static void text_console_invalidate(void *opaque) > > TextConsole *s = (TextConsole *) opaque; > > > > console_refresh(s); > > + /* resize if needed */ > > + text_console_resize(s); > > } > > > > static void text_console_update(void *opaque, console_ch_t *chardata) > > diff --git a/curses.c b/curses.c > > index d09eff2..a8972f4 100644 > > --- a/curses.c > > +++ b/curses.c > > @@ -362,8 +362,8 @@ void curses_display_init(DisplayState *ds, int > > full_screen) > > ds->data = (void *) screen; > > ds->linesize = 0; > > ds->depth = 0; > > - ds->width = 640; > > - ds->height = 400; > > + ds->width = COLS * FONT_WIDTH; > > + ds->height = LINES * FONT_HEIGHT; > > ds->dpy_update = curses_update; > > ds->dpy_resize = curses_resize; > > ds->dpy_refresh = curses_refresh; > > @@ -371,6 +371,6 @@ void curses_display_init(DisplayState *ds, int > > full_screen) > > > > invalidate = 1; > > > > - /* Standard VGA initial text mode dimensions */ > > - curses_resize(ds, 80, 25); > > + /* setup up initial display size based on terminal settings */ > > + curses_resize(ds, COLS, LINES); > > These two changes in curses.c don't look ok. ds->width/height and the > curses_resize() parameters are not supposed to be the host terminal > size, they're just the default settings for the virtual display size > (same way as sdl.c sets 640x400 at start regardless of the host, and > likely the bios will force the resize anyway). The host terminal > dimensions are later taken into account in curses_calc_pad to ensure > correct display.
Hrm, indeed. I had initially included that because without it the first display of the monitor wasn't correct. Pulling those changes out, that doesn't seem to be needed any more. > I can't comment on the console.c changes at the moment. I'll await comments on console.c and resend without the above two superflous changes. -- Ryan Harper Software Engineer; Linux Technology Center IBM Corp., Austin, Tx (512) 838-9253 T/L: 678-9253 [EMAIL PROTECTED] -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
