diff --git a/sim_video.c b/sim_video.c index 730ec2db..744d60ce 100644 --- a/sim_video.c +++ b/sim_video.c @@ -38,6 +38,13 @@ int32 vid_cursor_y; t_bool vid_mouse_b1 = FALSE; t_bool vid_mouse_b2 = FALSE; t_bool vid_mouse_b3 = FALSE; +static VID_QUIT_CALLBACK vid_quit_callback = NULL; + +t_stat vid_register_quit_callback (VID_QUIT_CALLBACK callback) +{ +vid_quit_callback = callback; +return SCPE_OK; +} t_stat vid_show (FILE* st, DEVICE *dptr, UNIT* uptr, int32 val, char* desc) { @@ -1735,6 +1742,11 @@ if (0) while (SDL_PeepEvents (&event, 1, SDL_GETEVENT, SD } } break; + case SDL_QUIT: + sim_debug (SIM_VID_DBG_VIDEO|SIM_VID_DBG_KEY|SIM_VID_DBG_MOUSE|SIM_VID_DBG_CURSOR, vid_dev, "vid_thread() - QUIT Event - %s\n", vid_quit_callback ? "Signaled" : "Ignored"); + if (vid_quit_callback) + vid_quit_callback (); + break; default: sim_debug (SIM_VID_DBG_VIDEO|SIM_VID_DBG_KEY|SIM_VID_DBG_MOUSE|SIM_VID_DBG_CURSOR, vid_dev, "vid_thread() - Ignored Event: Type: %s(%d)\n", eventtypes[event.type], event.type); diff --git a/sim_video.h b/sim_video.h index fc7f6165..365ffd85 100644 --- a/sim_video.h +++ b/sim_video.h @@ -174,6 +174,8 @@ typedef struct key_event SIM_KEY_EVENT; t_stat vid_open (DEVICE *dptr, const char *title, uint32 width, uint32 height, int flags); #define SIM_VID_INPUTCAPTURED 1 /* Mouse and Keyboard input captured (calling */ /* code responsible for cursor display in video) */ +typedef void (*VID_QUIT_CALLBACK)(void); +t_stat vid_register_quit_callback (VID_QUIT_CALLBACK callback); t_stat vid_close (void); t_stat vid_poll_kb (SIM_KEY_EVENT *ev); t_stat vid_poll_mouse (SIM_MOUSE_EVENT *ev);