diff --git a/panda/src/glxdisplay/glxGraphicsWindow.cxx b/panda/src/glxdisplay/glxGraphicsWindow.cxx index 025c6da4cf..26d0ac9b20 100644 --- a/panda/src/glxdisplay/glxGraphicsWindow.cxx +++ b/panda/src/glxdisplay/glxGraphicsWindow.cxx @@ -106,17 +106,26 @@ bool glxGraphicsWindow:: move_pointer(int device, int x, int y) { // Note: this is not thread-safe; it should be called only from App. // Probably not an issue. - nassertr(device == 0, false); - if (!_properties.get_foreground() || - !_input_devices[0].get_pointer().get_in_window()) { - // If the window doesn't have input focus, or the mouse isn't - // currently within the window, forget it. - return false; - } + if (device == 0) { + // Move the system mouse pointer. + if (!_properties.get_foreground() || + !_input_devices[0].get_pointer().get_in_window()) { + // If the window doesn't have input focus, or the mouse isn't + // currently within the window, forget it. + return false; + } - XWarpPointer(_display, None, _xwindow, 0, 0, 0, 0, x, y); - _input_devices[0].set_pointer_in_window(x, y); - return true; + XWarpPointer(_display, None, _xwindow, 0, 0, 0, 0, x, y); + _input_devices[0].set_pointer_in_window(x, y); + return true; + } else { + // Move a raw mouse. + if ((device < 1)||(device >= _input_devices.size())) { + return false; + } + _input_devices[device].set_pointer_in_window(x, y); + return true; + } } diff --git a/panda/src/windisplay/winGraphicsWindow.cxx b/panda/src/windisplay/winGraphicsWindow.cxx index a33e91986e..924277ba70 100644 --- a/panda/src/windisplay/winGraphicsWindow.cxx +++ b/panda/src/windisplay/winGraphicsWindow.cxx @@ -141,21 +141,30 @@ move_pointer(int device, int x, int y) { // Note: this is not thread-safe; it should be called only from App. // Probably not an issue. - nassertr(device == 0, false); - if (!_properties.get_foreground() ) -// !_input_devices[0].get_pointer().get_in_window()) - { - // If the window doesn't have input focus, or the mouse isn't - // currently within the window, forget it. - return false; + if (device == 0) { + // Move the system mouse pointer. + if (!_properties.get_foreground() ) + // !_input_devices[0].get_pointer().get_in_window()) + { + // If the window doesn't have input focus, or the mouse isn't + // currently within the window, forget it. + return false; + } + + RECT view_rect; + get_client_rect_screen(_hWnd, &view_rect); + + SetCursorPos(view_rect.left + x, view_rect.top + y); + _input_devices[0].set_pointer_in_window(x, y); + return true; + } else { + // Move a raw mouse. + if ((device < 1)||(device >= _input_devices.size())) { + return false; + } + _input_devices[device].set_pointer_in_window(x, y); + return true; } - - RECT view_rect; - get_client_rect_screen(_hWnd, &view_rect); - - SetCursorPos(view_rect.left + x, view_rect.top + y); - _input_devices[0].set_pointer_in_window(x, y); - return true; } ////////////////////////////////////////////////////////////////////