Skip to content

Commit 8fa8974

Browse files
committed
Forward color picker preview mouse button events to the window underneath.
1 parent 1586c56 commit 8fa8974

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

scene/gui/color_picker.cpp

+23-3
Original file line numberDiff line numberDiff line change
@@ -1748,9 +1748,29 @@ void ColorPicker::_pick_button_pressed() {
17481748

17491749
void ColorPicker::_target_gui_input(const Ref<InputEvent> &p_event) {
17501750
const Ref<InputEventMouseButton> mouse_event = p_event;
1751-
if (mouse_event.is_valid() && mouse_event->is_pressed()) {
1752-
picker_window->hide();
1753-
_pick_finished();
1751+
if (mouse_event.is_null()) {
1752+
return;
1753+
}
1754+
if (mouse_event->get_button_index() == MouseButton::LEFT) {
1755+
if (mouse_event->is_pressed()) {
1756+
picker_window->hide();
1757+
_pick_finished();
1758+
}
1759+
} else {
1760+
Window *w = picker_window->get_parent_visible_window();
1761+
while (w) {
1762+
Point2i win_mpos = w->get_mouse_position(); // Mouse position local to the window.
1763+
Size2i win_size = w->get_size();
1764+
if (win_mpos.x >= 0 && win_mpos.y >= 0 && win_mpos.x <= win_size.x && win_mpos.y <= win_size.y) {
1765+
// Mouse event inside window bounds, forward this event to the window.
1766+
Ref<InputEventMouseButton> new_ev = p_event->duplicate();
1767+
new_ev->set_position(win_mpos);
1768+
new_ev->set_global_position(win_mpos);
1769+
w->push_input(new_ev, true);
1770+
return;
1771+
}
1772+
w = w->get_parent_visible_window();
1773+
}
17541774
}
17551775
}
17561776

0 commit comments

Comments
 (0)