Ensure that the cached layout mode is in sync

This commit is contained in:
Yuri Sizov 2023-01-10 23:07:57 +03:00
parent 91713ced81
commit 42cbdbc7df
3 changed files with 12 additions and 0 deletions

View File

@ -727,6 +727,7 @@ void ControlEditorToolbar::_anchors_preset_selected(int p_preset) {
for (Node *E : selection) {
Control *control = Object::cast_to<Control>(E);
if (control) {
undo_redo->add_do_property(control, "layout_mode", LayoutMode::LAYOUT_MODE_ANCHORS);
undo_redo->add_do_property(control, "anchors_preset", preset);
undo_redo->add_undo_method(control, "_edit_set_state", control->_edit_get_state());
}

View File

@ -864,6 +864,14 @@ void Control::_set_layout_mode(LayoutMode p_mode) {
}
}
void Control::_update_layout_mode() {
LayoutMode computed_layout = _get_layout_mode();
if (data.stored_layout_mode != computed_layout) {
data.stored_layout_mode = computed_layout;
notify_property_list_changed();
}
}
Control::LayoutMode Control::_get_layout_mode() const {
Node *parent_node = get_parent_control();
// In these modes the property is read-only.
@ -2870,6 +2878,8 @@ void Control::_notification(int p_notification) {
data.parent_window = Object::cast_to<Window>(parent_node);
data.theme_owner->assign_theme_on_parented(this);
_update_layout_mode();
} break;
case NOTIFICATION_UNPARENTED: {

View File

@ -280,6 +280,7 @@ private:
void _compute_anchors(Rect2 p_rect, const real_t p_offsets[4], real_t (&r_anchors)[4]);
void _set_layout_mode(LayoutMode p_mode);
void _update_layout_mode();
LayoutMode _get_layout_mode() const;
LayoutMode _get_default_layout_mode() const;
void _set_anchors_layout_preset(int p_preset);