X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fapple2-main.c;h=7691e151faefe9cbc0796da46c13aab805e1de00;hb=6afd6db0ae9396cd7ff897ade597cd5483f49b0e;hp=0e1508ff1ad514e1a0ca064ab9f58df78634df81;hpb=6f5482d73adb0165c0130bb47d852644ab0c4869;p=xscreensaver diff --git a/hacks/apple2-main.c b/hacks/apple2-main.c index 0e1508ff..7691e151 100644 --- a/hacks/apple2-main.c +++ b/hacks/apple2-main.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1998-2012 Jamie Zawinski +/* xscreensaver, Copyright (c) 1998-2014 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -762,7 +762,21 @@ static void slideshow_controller(apple2_sim_t *sim, int *stepno, *stepno=10; break; + case 80: + /* Do nothing, just wait */ + *next_actiontime += 2.0; + *stepno = A2CONTROLLER_FREE; + break; + case A2CONTROLLER_FREE: + /* It is possible that still image is being loaded, + in that case mine cannot be freed, because + callback function tries to use it, so wait. + */ + if (mine->image_loading_p) { + *stepno = 80; + break; + } free(mine->render_img); free(mine->img_filename); free(mine); @@ -1278,7 +1292,8 @@ terminal_controller(apple2_sim_t *sim, int *stepno, double *next_actiontime) mine->tc = textclient_open (mine->dpy); textclient_reshape (mine->tc, SCREEN_COLS, SCREEN_ROWS, - SCREEN_COLS, SCREEN_ROWS); + SCREEN_COLS, SCREEN_ROWS, + 0); } if (! mine->fast_p) @@ -1770,7 +1785,11 @@ apple2_draw (Display *dpy, Window window, void *closure) st->sim = 0; } - return 10000; +#ifdef USE_IPHONE + return 0; +#else + return 5000; +#endif } static void @@ -1778,7 +1797,8 @@ apple2_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; - analogtv_reconfigure (st->sim->dec); + if (st->sim) + analogtv_reconfigure (st->sim->dec); } static Bool @@ -1786,7 +1806,8 @@ apple2_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; - if (st->controller == terminal_controller && + if (st->sim && + st->controller == terminal_controller && event->xany.type == KeyPress) { terminal_keypress_handler (dpy, event, st->sim->controller_data); return True;