changeset 1396:aca496957999

Only capture mouse if an emulated mouse is attached
author Michael Pavone <pavone@retrodev.com>
date Mon, 12 Jun 2017 21:12:28 -0700
parents efa7225e0f07
children 89eb967fed72
files io.c
diffstat 1 files changed, 15 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/io.c	Wed Jun 07 23:06:14 2017 -0700
+++ b/io.c	Mon Jun 12 21:12:28 2017 -0700
@@ -81,6 +81,7 @@
 } ui_action;
 
 typedef enum {
+	MOUSE_NONE,     //mouse is ignored
 	MOUSE_ABSOLUTE, //really only useful for menu ROM
 	MOUSE_RELATIVE, //for full screen
 	MOUSE_CAPTURE   //for windowed mode
@@ -610,6 +611,8 @@
 	}
 	switch(current_io->mouse_mode)
 	{
+	case MOUSE_NONE:
+		break;
 	case MOUSE_ABSOLUTE: {
 		float scale_x = 640.0 / ((float)render_width());
 		float scale_y = 480.0 / ((float)render_height());
@@ -895,15 +898,19 @@
 	process_device(io_2, ports+1);
 	process_device(io_ext, ports+2);
 
-	if (render_fullscreen()) {
-			current_io->mouse_mode = MOUSE_RELATIVE;
-			render_relative_mouse(1);
+	if (ports[0].device_type == IO_MOUSE || ports[1].device_type == IO_MOUSE || ports[2].device_type == IO_MOUSE) {
+		if (render_fullscreen()) {
+				current_io->mouse_mode = MOUSE_RELATIVE;
+				render_relative_mouse(1);
+		} else {
+			if (rom->mouse_mode && !strcmp(rom->mouse_mode, "absolute")) {
+				current_io->mouse_mode = MOUSE_ABSOLUTE;
+			} else {
+				current_io->mouse_mode = MOUSE_CAPTURE;
+			}
+		}
 	} else {
-		if (rom->mouse_mode && !strcmp(rom->mouse_mode, "absolute")) {
-			current_io->mouse_mode = MOUSE_ABSOLUTE;
-		} else {
-			current_io->mouse_mode = MOUSE_CAPTURE;
-		}
+		current_io->mouse_mode = MOUSE_NONE;
 	}
 
 	for (int i = 0; i < 3; i++)