# HG changeset patch # User Michael Pavone # Date 1497327148 25200 # Node ID aca4969579992b705305383fea3b0b7f8afe0a79 # Parent efa7225e0f07a65b9d02a87c6b6fe599ad55677f Only capture mouse if an emulated mouse is attached diff -r efa7225e0f07 -r aca496957999 io.c --- 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++)