diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-04-04 14:35:24 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-04-04 14:35:24 +0200 |
commit | 4abe9183e391adb7a4691c7779683b69f153c36a (patch) | |
tree | 75c67668eb4081fb53089c42b3d219f357a1c2e4 | |
parent | 32dcaa0659a7b114b48ee57cc3dcbf4b70cbbe6d (diff) | |
parent | 48ea01932203d810a6e01d5fa292ca124d72b8f0 (diff) | |
download | redot-engine-4abe9183e391adb7a4691c7779683b69f153c36a.tar.gz |
Merge pull request #89926 from Sauermann/fix-button-mask-special-case
Fix a special case for button masks
-rw-r--r-- | scene/main/viewport.cpp | 7 | ||||
-rw-r--r-- | tests/scene/test_code_edit.h | 1 |
2 files changed, 5 insertions, 3 deletions
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index 4e1d2b3983..5313493dc6 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -1705,9 +1705,10 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { Point2 mpos = mb->get_position(); if (mb->is_pressed()) { - if (!gui.mouse_focus_mask.is_empty()) { - // Do not steal mouse focus and stuff while a focus mask exists. - gui.mouse_focus_mask.set_flag(mouse_button_to_mask(mb->get_button_index())); + MouseButtonMask button_mask = mouse_button_to_mask(mb->get_button_index()); + if (!gui.mouse_focus_mask.is_empty() && !gui.mouse_focus_mask.has_flag(button_mask)) { + // Do not steal mouse focus and stuff while a focus mask without the current mouse button exists. + gui.mouse_focus_mask.set_flag(button_mask); } else { gui.mouse_focus = gui_find_control(mpos); gui.last_mouse_focus = gui.mouse_focus; diff --git a/tests/scene/test_code_edit.h b/tests/scene/test_code_edit.h index bc2f7f51b1..b0a46b8107 100644 --- a/tests/scene/test_code_edit.h +++ b/tests/scene/test_code_edit.h @@ -3520,6 +3520,7 @@ TEST_CASE("[SceneTree][CodeEdit] completion") { /* Single click selects. */ caret_pos.y += code_edit->get_line_height() * 2; SEND_GUI_MOUSE_BUTTON_EVENT(caret_pos, MouseButton::LEFT, MouseButtonMask::LEFT, Key::NONE); + SEND_GUI_MOUSE_BUTTON_RELEASED_EVENT(caret_pos, MouseButton::LEFT, MouseButtonMask::NONE, Key::NONE); CHECK(code_edit->get_code_completion_selected_index() == 2); /* Double click inserts. */ |