Commit 898ae284 authored by Lei Li's avatar Lei Li Committed by Anthony Liguori
Browse files

sdl: Reverse support for video mode setting



Currently, If the setting of video mode failed, qemu will exit. It
should go back to the previous setting if the new screen resolution
failed. This patch fixes LP#1216368, add support to revert to existing
surface for the failure of video mode setting.

Reported-by: default avatarSascha Krissler <sascha@srlabs.de>
Signed-off-by: default avatarLei Li <lilei@linux.vnet.ibm.com>
Reviewed-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Message-id: 1378285636-7091-1-git-send-email-lilei@linux.vnet.ibm.com
Signed-off-by: default avatarAnthony Liguori <aliguori@amazon.com>
parent 5f3e3101
Loading
Loading
Loading
Loading
+19 −4
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@ static void sdl_update(DisplayChangeListener *dcl,
static void do_sdl_resize(int width, int height, int bpp)
{
    int flags;
    SDL_Surface *tmp_screen;

    //    printf("resizing to %d %d\n", w, h);

@@ -98,12 +99,26 @@ static void do_sdl_resize(int width, int height, int bpp)
    if (gui_noframe)
        flags |= SDL_NOFRAME;

    real_screen = SDL_SetVideoMode(width, height, bpp, flags);
    tmp_screen = SDL_SetVideoMode(width, height, bpp, flags);
    if (!real_screen) {
	fprintf(stderr, "Could not open SDL display (%dx%dx%d): %s\n", width, 
		height, bpp, SDL_GetError());
        if (!tmp_screen) {
            fprintf(stderr, "Could not open SDL display (%dx%dx%d): %s\n",
                    width, height, bpp, SDL_GetError());
            exit(1);
        }
    } else {
        /*
         * Revert to the previous video mode if the change of resizing or
         * resolution failed.
         */
        if (!tmp_screen) {
            fprintf(stderr, "Failed to set SDL display (%dx%dx%d): %s\n",
                    width, height, bpp, SDL_GetError());
            return;
        }
    }

    real_screen = tmp_screen;
}

static void sdl_switch(DisplayChangeListener *dcl,