From 7d6364d431a16e619db7cd1092192ea647dc11b8 Mon Sep 17 00:00:00 2001 From: Guilherme Felipe <guilhermefelipecgs@gmail.com> Date: Tue, 4 Sep 2018 10:11:37 -0300 Subject: [PATCH] Fixes to mouse mode confined and captured These modes will work on Linux in the same way as Windows. --- platform/x11/os_x11.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index a57a8c6bb93..56eddb5ca43 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -742,12 +742,15 @@ void OS_X11::set_mouse_mode(MouseMode p_mode) { ERR_PRINT("NO GRAB"); } - center.x = current_videomode.width / 2; - center.y = current_videomode.height / 2; - XWarpPointer(x11_display, None, x11_window, - 0, 0, 0, 0, (int)center.x, (int)center.y); + if (mouse_mode == MOUSE_MODE_CAPTURED) { + center.x = current_videomode.width / 2; + center.y = current_videomode.height / 2; - input->set_mouse_position(center); + XWarpPointer(x11_display, None, x11_window, + 0, 0, 0, 0, (int)center.x, (int)center.y); + + input->set_mouse_position(center); + } } else { do_mouse_warp = false; } @@ -2044,6 +2047,10 @@ void OS_X11::process_xevents() { Point2i rel = pos - last_mouse_pos; + if (mouse_mode == MOUSE_MODE_CAPTURED) { + pos = Point2i(current_videomode.width / 2, current_videomode.height / 2); + } + Ref<InputEventMouseMotion> mm; mm.instance();