From 1b93574e733d998da1cda89814950d9bb1fc35dd Mon Sep 17 00:00:00 2001 From: n-a-c-h <> Date: Sat, 25 Mar 2006 20:48:54 +0000 Subject: [PATCH] Fix for dual mice. --- zsnes/src/uic.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/zsnes/src/uic.c b/zsnes/src/uic.c index 6e5b8b5c..f2c66868 100644 --- a/zsnes/src/uic.c +++ b/zsnes/src/uic.c @@ -452,6 +452,8 @@ unsigned short MouseMoveX[2]; unsigned short MouseMoveY[2]; unsigned short MouseButton[2]; +bool MouseWaiting[2]; + void MultiMouseShutdown() { MouseCount = 0; @@ -467,6 +469,7 @@ void MultiMouseInit() MouseMoveX[0] = MouseMoveX[1] = 0; MouseMoveY[0] = MouseMoveY[1] = 0; MouseButton[0] = MouseButton[1] = 0; + MouseWaiting[0] = MouseWaiting[1] = false; atexit(MultiMouseShutdown); printf("Using ManyMouse for:\nMouse 0: %s\nMouse 1: %s\n", ManyMouse_DeviceName(0), ManyMouse_DeviceName(1)); @@ -486,13 +489,27 @@ unsigned char mouse; void MultiMouseProcess() { ManyMouseEvent event; - MouseMoveX[mouse] = 0; - MouseMoveY[mouse] = 0; - - while (ManyMouse_PollEvent(&event)) + if (MouseWaiting[mouse]) { - if ((event.device == 0) || (event.device == 1)) + MouseWaiting[mouse] = false; + } + else + { + MouseMoveX[mouse] = 0; + MouseMoveY[mouse] = 0; + + while (ManyMouse_PollEvent(&event)) { + if (event.device != 0 && event.device != 1) + { + continue; + } + + if (event.device == (mouse^1)); + { + MouseWaiting[event.device] = true; + } + if (event.type == MANYMOUSE_EVENT_RELMOTION) { if (event.item == 0) { MouseMoveX[event.device] = event.value; }