# HG changeset patch # User Michael Pavone # Date 1525193084 25200 # Node ID 2b132d894d76da6acbc72b61b69ca06d3167368c # Parent ccb3a8ae7ad0f55ef96c4d981eb31024f149d9b1 Release capture of mouse and keyboard when entering UI diff -r ccb3a8ae7ad0 -r 2b132d894d76 genesis.c --- a/genesis.c Mon Apr 30 23:58:24 2018 -0700 +++ b/genesis.c Tue May 01 09:44:44 2018 -0700 @@ -1063,6 +1063,7 @@ resume_68k(gen->m68k); } } + io_release_capture(&gen->io); vdp_release_framebuffer(gen->vdp); render_pause_source(gen->ym->audio); render_pause_source(gen->psg->audio); @@ -1111,6 +1112,7 @@ genesis_context *gen = (genesis_context *)system; map_all_bindings(&gen->io); render_set_video_standard((gen->version_reg & HZ50) ? VID_PAL : VID_NTSC); + io_reacquire_capture(&gen->io); vdp_reacquire_framebuffer(gen->vdp); render_resume_source(gen->ym->audio); render_resume_source(gen->psg->audio); diff -r ccb3a8ae7ad0 -r 2b132d894d76 io.c --- a/io.c Mon Apr 30 23:58:24 2018 -0700 +++ b/io.c Tue May 01 09:44:44 2018 -0700 @@ -674,6 +674,21 @@ } } +void io_release_capture(sega_io *io) +{ + if (io->mouse_mode == MOUSE_RELATIVE || (io->mouse_mode == MOUSE_CAPTURE && io->mouse_captured)) { + render_relative_mouse(0); + } + current_io->keyboard_captured = 0; +} + +void io_reacquire_capture(sega_io *io) +{ + if (io->mouse_mode == MOUSE_RELATIVE || (io->mouse_mode == MOUSE_CAPTURE && io->mouse_captured)) { + render_relative_mouse(1); + } +} + int parse_binding_target(char * target, tern_node * padbuttons, tern_node *mousebuttons, int * ui_out, int * padnum_out, int * padbutton_out) { const int gpadslen = strlen("gamepads."); diff -r ccb3a8ae7ad0 -r 2b132d894d76 io.h --- a/io.h Mon Apr 30 23:58:24 2018 -0700 +++ b/io.h Tue May 01 09:44:44 2018 -0700 @@ -110,6 +110,8 @@ void handle_mouseup(int mouse, int button); void io_serialize(io_port *port, serialize_buffer *buf); void io_deserialize(deserialize_buffer *buf, void *vport); +void io_release_capture(sega_io *io); +void io_reacquire_capture(sega_io *io); extern const char * device_type_names[];