summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-08-06 12:30:52 +0200
committerRémi Verschelde <rverschelde@gmail.com>2024-08-06 12:30:52 +0200
commit945f70ef34bc90cc0a2451051f18603eaa5e86a7 (patch)
treefda76f6ae558a35cf3d11787aa79a6491412c074
parent77353e72e19a42ee527ac9d0a4012dff340be950 (diff)
parent99b0100a06f33e990118fb1241061f8625c166a7 (diff)
downloadredot-engine-945f70ef34bc90cc0a2451051f18603eaa5e86a7.tar.gz
Merge pull request #95008 from bruvzg/x11_mm_state
[X11] Use motion event button state instead of async state.
-rw-r--r--platform/linuxbsd/x11/display_server_x11.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/platform/linuxbsd/x11/display_server_x11.cpp b/platform/linuxbsd/x11/display_server_x11.cpp
index 4a52e26373..8a2f83be2d 100644
--- a/platform/linuxbsd/x11/display_server_x11.cpp
+++ b/platform/linuxbsd/x11/display_server_x11.cpp
@@ -4970,6 +4970,23 @@ void DisplayServerX11::process_events() {
pos = Point2i(windows[focused_window_id].size.width / 2, windows[focused_window_id].size.height / 2);
}
+ BitField<MouseButtonMask> last_button_state = 0;
+ if (event.xmotion.state & Button1Mask) {
+ last_button_state.set_flag(MouseButtonMask::LEFT);
+ }
+ if (event.xmotion.state & Button2Mask) {
+ last_button_state.set_flag(MouseButtonMask::MIDDLE);
+ }
+ if (event.xmotion.state & Button3Mask) {
+ last_button_state.set_flag(MouseButtonMask::RIGHT);
+ }
+ if (event.xmotion.state & Button4Mask) {
+ last_button_state.set_flag(MouseButtonMask::MB_XBUTTON1);
+ }
+ if (event.xmotion.state & Button5Mask) {
+ last_button_state.set_flag(MouseButtonMask::MB_XBUTTON2);
+ }
+
Ref<InputEventMouseMotion> mm;
mm.instantiate();
@@ -4977,13 +4994,13 @@ void DisplayServerX11::process_events() {
if (xi.pressure_supported) {
mm->set_pressure(xi.pressure);
} else {
- mm->set_pressure(bool(mouse_get_button_state().has_flag(MouseButtonMask::LEFT)) ? 1.0f : 0.0f);
+ mm->set_pressure(bool(last_button_state.has_flag(MouseButtonMask::LEFT)) ? 1.0f : 0.0f);
}
mm->set_tilt(xi.tilt);
mm->set_pen_inverted(xi.pen_inverted);
_get_key_modifier_state(event.xmotion.state, mm);
- mm->set_button_mask(mouse_get_button_state());
+ mm->set_button_mask(last_button_state);
mm->set_position(pos);
mm->set_global_position(pos);
mm->set_velocity(Input::get_singleton()->get_last_mouse_velocity());