diff options
author | mm <40793342+moiman100@users.noreply.github.com> | 2018-07-08 16:12:13 +0300 |
---|---|---|
committer | unknown <40793342+moiman100@users.noreply.github.com> | 2018-07-11 01:15:03 +0300 |
commit | bd9c592c528034a58f4ede0bd2ba06760dd360b5 (patch) | |
tree | 4b8e95c7b69af6b1609bf5ee846f314312baa8ec /platform/x11 | |
parent | a184126e8b2a74b47137b47001c1d11a092ccdaa (diff) |
Fixed button mask behavior
Diffstat (limited to 'platform/x11')
-rw-r--r-- | platform/x11/os_x11.cpp | 44 | ||||
-rw-r--r-- | platform/x11/os_x11.h | 2 |
2 files changed, 13 insertions, 33 deletions
diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index 2bc85f76c9..98aa7c8e48 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -1350,37 +1350,17 @@ void OS_X11::get_key_modifier_state(unsigned int p_x11_state, Ref<InputEventWith state->set_metakey((p_x11_state & Mod4Mask)); } -unsigned int OS_X11::get_mouse_button_state(unsigned int p_x11_state) { +unsigned int OS_X11::get_mouse_button_state(unsigned int p_x11_button, int p_x11_type) { - unsigned int state = 0; + unsigned int mask = 1 << (p_x11_button - 1); - if (p_x11_state & Button1Mask) { - - state |= 1 << 0; - } - - if (p_x11_state & Button3Mask) { - - state |= 1 << 1; - } - - if (p_x11_state & Button2Mask) { - - state |= 1 << 2; - } - - if (p_x11_state & Button4Mask) { - - state |= 1 << 3; - } - - if (p_x11_state & Button5Mask) { - - state |= 1 << 4; + if (p_x11_type == ButtonPress) { + last_button_state |= mask; + } else { + last_button_state &= ~mask; } - last_button_state = state; - return state; + return last_button_state; } void OS_X11::handle_key_event(XKeyEvent *p_event, bool p_echo) { @@ -1885,14 +1865,14 @@ void OS_X11::process_xevents() { mb.instance(); get_key_modifier_state(event.xbutton.state, mb); - mb->set_button_mask(get_mouse_button_state(event.xbutton.state)); - mb->set_position(Vector2(event.xbutton.x, event.xbutton.y)); - mb->set_global_position(mb->get_position()); - mb->set_button_index(event.xbutton.button); if (mb->get_button_index() == 2) mb->set_button_index(3); else if (mb->get_button_index() == 3) mb->set_button_index(2); + mb->set_button_mask(get_mouse_button_state(event.xbutton.button, event.xbutton.type)); + mb->set_position(Vector2(event.xbutton.x, event.xbutton.y)); + mb->set_global_position(mb->get_position()); + mb->set_button_index(event.xbutton.button); mb->set_pressed((event.type == ButtonPress)); @@ -1996,7 +1976,7 @@ void OS_X11::process_xevents() { mm.instance(); get_key_modifier_state(event.xmotion.state, mm); - mm->set_button_mask(get_mouse_button_state(event.xmotion.state)); + mm->set_button_mask(get_mouse_button_state()); mm->set_position(pos); mm->set_global_position(pos); input->set_mouse_position(pos); diff --git a/platform/x11/os_x11.h b/platform/x11/os_x11.h index 8cab23fe63..da7e0e3e4b 100644 --- a/platform/x11/os_x11.h +++ b/platform/x11/os_x11.h @@ -135,7 +135,7 @@ class OS_X11 : public OS_Unix { } touch; #endif - unsigned int get_mouse_button_state(unsigned int p_x11_state); + unsigned int get_mouse_button_state(unsigned int p_x11_button, int p_x11_type); void get_key_modifier_state(unsigned int p_x11_state, Ref<InputEventWithModifiers> state); MouseMode mouse_mode; |