Keep input event as unhandled if they go through a control set to MOUSE_FILTER_PASS
This commit is contained in:
parent
6a9a76d008
commit
6db8b7616d
5 changed files with 77 additions and 26 deletions
|
|
@ -471,6 +471,13 @@ void Control::_validate_property(PropertyInfo &property) const {
|
|||
property.hint_string = hint_string;
|
||||
}
|
||||
|
||||
if (property.name == "mouse_force_pass_scroll_events") {
|
||||
// Disable force pass if the control is not stopping the event.
|
||||
if (data.mouse_filter != MOUSE_FILTER_STOP) {
|
||||
property.usage |= PROPERTY_USAGE_READ_ONLY;
|
||||
}
|
||||
}
|
||||
|
||||
// Validate which positioning properties should be displayed depending on the parent and the layout mode.
|
||||
Node *parent_node = get_parent_control();
|
||||
if (!parent_node) {
|
||||
|
|
@ -2931,6 +2938,7 @@ int Control::get_v_size_flags() const {
|
|||
void Control::set_mouse_filter(MouseFilter p_filter) {
|
||||
ERR_FAIL_INDEX(p_filter, 3);
|
||||
data.mouse_filter = p_filter;
|
||||
notify_property_list_changed();
|
||||
update_configuration_warnings();
|
||||
}
|
||||
|
||||
|
|
@ -2938,6 +2946,14 @@ Control::MouseFilter Control::get_mouse_filter() const {
|
|||
return data.mouse_filter;
|
||||
}
|
||||
|
||||
void Control::set_force_pass_scroll_events(bool p_force_pass_scroll_events) {
|
||||
data.force_pass_scroll_events = p_force_pass_scroll_events;
|
||||
}
|
||||
|
||||
bool Control::is_force_pass_scroll_events() const {
|
||||
return data.force_pass_scroll_events;
|
||||
}
|
||||
|
||||
void Control::warp_mouse(const Point2 &p_position) {
|
||||
ERR_FAIL_COND(!is_inside_tree());
|
||||
get_viewport()->warp_mouse(get_global_transform_with_canvas().xform(p_position));
|
||||
|
|
@ -3250,6 +3266,9 @@ void Control::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("set_mouse_filter", "filter"), &Control::set_mouse_filter);
|
||||
ClassDB::bind_method(D_METHOD("get_mouse_filter"), &Control::get_mouse_filter);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_force_pass_scroll_events", "force_pass_scroll_events"), &Control::set_force_pass_scroll_events);
|
||||
ClassDB::bind_method(D_METHOD("is_force_pass_scroll_events"), &Control::is_force_pass_scroll_events);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_clip_contents", "enable"), &Control::set_clip_contents);
|
||||
ClassDB::bind_method(D_METHOD("is_clipping_contents"), &Control::is_clipping_contents);
|
||||
|
||||
|
|
@ -3331,6 +3350,7 @@ void Control::_bind_methods() {
|
|||
|
||||
ADD_GROUP("Mouse", "mouse_");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "mouse_filter", PROPERTY_HINT_ENUM, "Stop,Pass,Ignore"), "set_mouse_filter", "get_mouse_filter");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "mouse_force_pass_scroll_events"), "set_force_pass_scroll_events", "is_force_pass_scroll_events");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "mouse_default_cursor_shape", PROPERTY_HINT_ENUM, "Arrow,I-Beam,Pointing Hand,Cross,Wait,Busy,Drag,Can Drop,Forbidden,Vertical Resize,Horizontal Resize,Secondary Diagonal Resize,Main Diagonal Resize,Move,Vertical Split,Horizontal Split,Help"), "set_default_cursor_shape", "get_default_cursor_shape");
|
||||
|
||||
ADD_GROUP("Theme", "theme_");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue