Improve error handling on display initialisation

This commit is contained in:
Simon Robertshaw
2011-05-24 14:54:14 +01:00
parent 128e8c1ff8
commit eafcdf8ec9
5 changed files with 30 additions and 10 deletions

View File

@@ -206,5 +206,5 @@ void sdl_seticon(void);
void play_sound(char *file); void play_sound(char *file);
void start_grav_async(void); void start_grav_async(void);
void stop_grav_async(void); void stop_grav_async(void);
void set_scale(int scale, int kiosk); int set_scale(int scale, int kiosk);
#endif #endif

View File

@@ -140,7 +140,7 @@ int render_thumb(void *thumb, int size, int bzip2, pixel *vid_buf, int px, int p
void render_cursor(pixel *vid, int x, int y, int t, int rx, int ry); void render_cursor(pixel *vid, int x, int y, int t, int rx, int ry);
void sdl_open(void); int sdl_open(void);
#ifdef OpenGL #ifdef OpenGL
void Enable2D (); void Enable2D ();

View File

@@ -3824,12 +3824,12 @@ void render_cursor(pixel *vid, int x, int y, int t, int rx, int ry)
} }
} }
void sdl_open(void) int sdl_open(void)
{ {
if (SDL_Init(SDL_INIT_VIDEO)<0) if (SDL_Init(SDL_INIT_VIDEO)<0)
{ {
fprintf(stderr, "Initializing SDL: %s\n", SDL_GetError()); fprintf(stderr, "Initializing SDL: %s\n", SDL_GetError());
exit(1); return 0;
} }
atexit(SDL_Quit); atexit(SDL_Quit);
#ifdef OpenGL #ifdef OpenGL
@@ -3861,12 +3861,22 @@ void sdl_open(void)
if (!sdl_scrn) if (!sdl_scrn)
{ {
fprintf(stderr, "Creating window: %s\n", SDL_GetError()); fprintf(stderr, "Creating window: %s\n", SDL_GetError());
exit(1); return 0;
} }
SDL_WM_SetCaption("The Powder Toy", "Powder Toy"); SDL_WM_SetCaption("The Powder Toy", "Powder Toy");
sdl_seticon(); sdl_seticon();
SDL_EnableUNICODE(1); SDL_EnableUNICODE(1);
//SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); //SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
#if (defined(LIN32) || defined(LIN64)) && defined(SDL_VIDEO_DRIVER_X11)
SDL_EventState(SDL_SYSWMEVENT, SDL_ENABLE);
SDL_VERSION(&sdl_wminfo.version);
SDL_GetWMInfo(&sdl_wminfo);
sdl_wminfo.info.x11.lock_func();
XA_CLIPBOARD = XInternAtom(sdl_wminfo.info.x11.display, "CLIPBOARD", 1);
XA_TARGETS = XInternAtom(sdl_wminfo.info.x11.display, "TARGETS", 1);
sdl_wminfo.info.x11.unlock_func();
#endif
return 1;
} }
#ifdef OpenGL #ifdef OpenGL

View File

@@ -4659,7 +4659,10 @@ void simulation_ui(pixel * vid_buf)
new_scale = (cb3.checked)?2:1; new_scale = (cb3.checked)?2:1;
new_kiosk = (cb4.checked)?1:0; new_kiosk = (cb4.checked)?1:0;
if(new_scale!=sdl_scale || new_kiosk!=kiosk_enable) if(new_scale!=sdl_scale || new_kiosk!=kiosk_enable)
set_scale(new_scale, new_kiosk); {
if (!set_scale(new_scale, new_kiosk))
error_ui(vid_buf, 0, "Could not change display options");
}
if(ngrav_enable != cb2.checked) if(ngrav_enable != cb2.checked)
{ {
if(cb2.checked) if(cb2.checked)

View File

@@ -1231,11 +1231,18 @@ char my_uri[] = "http://" SERVER "/Update.api?Action=Download&Architecture="
#endif #endif
; ;
void set_scale(int scale, int kiosk){ int set_scale(int scale, int kiosk){
int old_scale = sdl_scale, old_kiosk = kiosk_enable;
sdl_scale = scale; sdl_scale = scale;
kiosk_enable = kiosk; kiosk_enable = kiosk;
sdl_open(); if (!sdl_open())
return; {
sdl_scale = old_scale;
kiosk_enable = old_kiosk;
sdl_open();
return 0;
}
return 1;
} }
void update_grav_async() void update_grav_async()
@@ -1564,7 +1571,7 @@ int main(int argc, char *argv[])
stamp_init(); stamp_init();
sdl_open(); if (!sdl_open()) exit(1);
http_init(http_proxy_string[0] ? http_proxy_string : NULL); http_init(http_proxy_string[0] ? http_proxy_string : NULL);
if (cpu_check()) if (cpu_check())