changeset 1576:2b132d894d76

Release capture of mouse and keyboard when entering UI
author Michael Pavone <pavone@retrodev.com>
date Tue, 01 May 2018 09:44:44 -0700
parents ccb3a8ae7ad0
children 69d624271cf8
files genesis.c io.c io.h
diffstat 3 files changed, 19 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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.");
--- 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[];