diff options
| author | Rémi Verschelde <rverschelde@gmail.com> | 2018-12-14 23:47:03 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-12-14 23:47:03 +0100 |
| commit | 5f32fc82087404ac2c803770dc9d1e3711fc14fd (patch) | |
| tree | 8648290c5456f219de0b2315badc52e017a3fa08 /platform/x11 | |
| parent | 57c3f6a94ba547cfb4c3bcfd7a3e2e784239fd4e (diff) | |
| parent | 51fa23a52a71fcbae5743587b35b179dcc226b92 (diff) | |
| download | redot-engine-5f32fc82087404ac2c803770dc9d1e3711fc14fd.tar.gz | |
Merge pull request #20385 from moiman100/unify-double-clicking
Added double clicking to all buttons on Linux and Javascript
Diffstat (limited to 'platform/x11')
| -rw-r--r-- | platform/x11/os_x11.cpp | 22 | ||||
| -rw-r--r-- | platform/x11/os_x11.h | 1 |
2 files changed, 17 insertions, 6 deletions
diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index d685e7cef9..1a6fcc933a 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -96,6 +96,8 @@ Error OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_a xmbstring = NULL; x11_window = 0; last_click_ms = 0; + last_click_button_index = -1; + last_click_pos = Point2(-100, -100); args = OS::get_singleton()->get_cmdline_args(); current_videomode = p_desired; main_loop = NULL; @@ -1958,17 +1960,25 @@ void OS_X11::process_xevents() { mb->set_pressed((event.type == ButtonPress)); - if (event.type == ButtonPress && event.xbutton.button == 1) { + if (event.type == ButtonPress) { uint64_t diff = get_ticks_usec() / 1000 - last_click_ms; - if (diff < 400 && Point2(last_click_pos).distance_to(Point2(event.xbutton.x, event.xbutton.y)) < 5) { + if (mb->get_button_index() == last_click_button_index) { - last_click_ms = 0; - last_click_pos = Point2(-100, -100); - mb->set_doubleclick(true); + if (diff < 400 && Point2(last_click_pos).distance_to(Point2(event.xbutton.x, event.xbutton.y)) < 5) { - } else { + last_click_ms = 0; + last_click_pos = Point2(-100, -100); + last_click_button_index = -1; + mb->set_doubleclick(true); + } + + } else if (mb->get_button_index() < 4 || mb->get_button_index() > 7) { + last_click_button_index = mb->get_button_index(); + } + + if (!mb->is_doubleclick()) { last_click_ms += diff; last_click_pos = Point2(event.xbutton.x, event.xbutton.y); } diff --git a/platform/x11/os_x11.h b/platform/x11/os_x11.h index 8424c2c944..68a1e51376 100644 --- a/platform/x11/os_x11.h +++ b/platform/x11/os_x11.h @@ -125,6 +125,7 @@ class OS_X11 : public OS_Unix { bool last_mouse_pos_valid; Point2i last_click_pos; uint64_t last_click_ms; + int last_click_button_index; uint32_t last_button_state; #ifdef TOUCH_ENABLED struct { |
