diff -ur qemu/sdl.c qemu-patched/sdl.c --- qemu/sdl.c Wed Jul 14 19:22:33 2004 +++ qemu-patched/sdl.c Mon Sep 6 10:44:11 2004 @@ -45,6 +45,10 @@ { // printf("updating x=%d y=%d w=%d h=%d\n", x, y, w, h); SDL_UpdateRect(screen, x, y, w, h); + /* FIXME: next two lines are a quick fix, to make + * sure grab is always on in fullscreen mode */ + if (gui_fullscreen) + sdl_grab_start(); } static void sdl_resize(DisplayState *ds, int w, int h) @@ -540,7 +544,7 @@ SDL_Quit(); } -void sdl_display_init(DisplayState *ds) +void sdl_display_init(DisplayState *ds, int full) { int flags; @@ -566,4 +570,8 @@ gui_grab = 0; atexit(sdl_cleanup); + + if (full) { + gui_fullscreen = 1; + } } diff -ur qemu/slirp/misc.c qemu-patched/slirp/misc.c --- qemu/slirp/misc.c Mon Sep 6 01:10:26 2004 +++ qemu-patched/slirp/misc.c Wed Sep 8 16:12:14 2004 @@ -90,13 +90,12 @@ char buff[256]; struct hostent *he; - if (gethostname(buff,256) < 0) - return; - - if ((he = gethostbyname(buff)) == NULL) - return; - - our_addr = *(struct in_addr *)he->h_addr; + if (gethostname(buff,256) == 0) + if ((he = gethostbyname(buff)) != NULL) + our_addr = *(struct in_addr *)he->h_addr; + + if (our_addr.s_addr == 0 || our_addr.s_addr == loopback_addr.s_addr) + our_addr.s_addr = special_addr.s_addr | htonl(CTL_ALIAS); } #if SIZEOF_CHAR_P == 8 diff -ur qemu/slirp/slirp.c qemu-patched/slirp/slirp.c --- qemu/slirp/slirp.c Mon Sep 6 01:10:26 2004 +++ qemu-patched/slirp/slirp.c Wed Sep 8 16:13:00 2004 @@ -144,7 +144,6 @@ m_init(); /* set default addresses */ - getouraddr(); inet_aton("127.0.0.1", &loopback_addr); if (get_dns_addr(&dns_addr) < 0) { @@ -153,6 +152,7 @@ } inet_aton(CTL_SPECIAL, &special_addr); + getouraddr(); } #define CONN_CANFSEND(so) (((so)->so_state & (SS_FCANTSENDMORE|SS_ISFCONNECTED)) == SS_ISFCONNECTED) diff -ur qemu/slirp/udp.c qemu-patched/slirp/udp.c --- qemu/slirp/udp.c Tue Aug 24 23:57:12 2004 +++ qemu-patched/slirp/udp.c Mon Sep 6 10:44:11 2004 @@ -314,6 +314,8 @@ saddr = *addr; if ((so->so_faddr.s_addr & htonl(0xffffff00)) == special_addr.s_addr) saddr.sin_addr.s_addr = so->so_faddr.s_addr; + if ((so->so_faddr.s_addr & htonl(0x000000ff)) == htonl(0xff)) + saddr.sin_addr.s_addr = special_addr.s_addr | htonl(CTL_ALIAS); daddr.sin_addr = so->so_laddr; daddr.sin_port = so->so_lport; diff -ur qemu/vl.c qemu-patched/vl.c --- qemu/vl.c Mon Sep 6 02:14:04 2004 +++ qemu-patched/vl.c Mon Sep 6 10:44:11 2004 @@ -128,6 +128,7 @@ int graphic_width = 800; int graphic_height = 600; int graphic_depth = 15; +int full_screen = 0; TextConsole *vga_console; CharDriverState *serial_hds[MAX_SERIAL_PORTS]; @@ -2586,6 +2587,7 @@ QEMU_OPTION_std_vga, QEMU_OPTION_monitor, QEMU_OPTION_serial, + QEMU_OPTION_full_screen, }; typedef struct QEMUOption { @@ -2642,6 +2644,7 @@ { "std-vga", 0, QEMU_OPTION_std_vga }, { "monitor", 1, QEMU_OPTION_monitor }, { "serial", 1, QEMU_OPTION_serial }, + { "full-screen", 0, QEMU_OPTION_full_screen }, /* temporary options */ { "pci", 0, QEMU_OPTION_pci }, @@ -3040,6 +3043,9 @@ sizeof(serial_devices[0]), optarg); serial_device_index++; break; + case QEMU_OPTION_full_screen: + full_screen = 1; + break; } } } @@ -3224,7 +3230,7 @@ dumb_display_init(ds); } else { #ifdef CONFIG_SDL - sdl_display_init(ds); + sdl_display_init(ds, full_screen); #else dumb_display_init(ds); #endif diff -ur qemu/vl.h qemu-patched/vl.h --- qemu/vl.h Tue Aug 24 23:13:40 2004 +++ qemu-patched/vl.h Mon Sep 6 10:44:11 2004 @@ -536,7 +536,7 @@ unsigned long vga_ram_offset, int vga_ram_size); /* sdl.c */ -void sdl_display_init(DisplayState *ds); +void sdl_display_init(DisplayState *ds, int full); /* ide.c */ #define MAX_DISKS 4