mirror of
https://github.com/godotengine/godot
synced 2024-09-05 18:09:34 +00:00
Merge pull request #30623 from Awkor/disable-container-child-editing
Prevent editing properties managed by parent container
This commit is contained in:
commit
d9b07faad2
|
@ -30,6 +30,7 @@
|
|||
|
||||
#include "control.h"
|
||||
|
||||
#include "container.h"
|
||||
#include "core/config/project_settings.h"
|
||||
#include "core/math/geometry_2d.h"
|
||||
#include "core/object/message_queue.h"
|
||||
|
@ -168,6 +169,20 @@ Size2 Control::_edit_get_minimum_size() const {
|
|||
}
|
||||
#endif
|
||||
|
||||
String Control::properties_managed_by_container[] = {
|
||||
"offset_left",
|
||||
"offset_top",
|
||||
"offset_right",
|
||||
"offset_bottom",
|
||||
"anchor_left",
|
||||
"anchor_top",
|
||||
"anchor_right",
|
||||
"anchor_bottom",
|
||||
"rect_position",
|
||||
"rect_scale",
|
||||
"rect_size"
|
||||
};
|
||||
|
||||
void Control::accept_event() {
|
||||
if (is_inside_tree()) {
|
||||
get_viewport()->_gui_accept_event();
|
||||
|
@ -442,6 +457,20 @@ void Control::_validate_property(PropertyInfo &property) const {
|
|||
|
||||
property.hint_string = hint_string;
|
||||
}
|
||||
if (!Object::cast_to<Container>(get_parent())) {
|
||||
return;
|
||||
}
|
||||
// Disable the property if it's managed by the parent container.
|
||||
bool property_is_managed_by_container = false;
|
||||
for (unsigned i = 0; i < properties_managed_by_container_count; i++) {
|
||||
property_is_managed_by_container = properties_managed_by_container[i] == property.name;
|
||||
if (property_is_managed_by_container) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (property_is_managed_by_container) {
|
||||
property.usage |= PROPERTY_USAGE_READ_ONLY;
|
||||
}
|
||||
}
|
||||
|
||||
Control *Control::get_parent_control() const {
|
||||
|
|
|
@ -230,6 +230,9 @@ private:
|
|||
|
||||
} data;
|
||||
|
||||
static constexpr unsigned properties_managed_by_container_count = 11;
|
||||
static String properties_managed_by_container[properties_managed_by_container_count];
|
||||
|
||||
// used internally
|
||||
Control *_find_control_at_pos(CanvasItem *p_node, const Point2 &p_pos, const Transform2D &p_xform, Transform2D &r_inv_xform);
|
||||
|
||||
|
|
Loading…
Reference in a new issue