summaryrefslogtreecommitdiff
path: root/platform/x11
diff options
context:
space:
mode:
authormm <40793342+moiman100@users.noreply.github.com>2018-07-08 16:12:13 +0300
committerunknown <40793342+moiman100@users.noreply.github.com>2018-07-11 01:15:03 +0300
commitbd9c592c528034a58f4ede0bd2ba06760dd360b5 (patch)
tree4b8e95c7b69af6b1609bf5ee846f314312baa8ec /platform/x11
parenta184126e8b2a74b47137b47001c1d11a092ccdaa (diff)
Fixed button mask behavior
Diffstat (limited to 'platform/x11')
-rw-r--r--platform/x11/os_x11.cpp44
-rw-r--r--platform/x11/os_x11.h2
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;