Merge pull request #80752 from bitsawer/fix_thread_guard
Fix CanvasItem notification thread guard
This commit is contained in:
commit
3a990e36e6
|
@ -424,14 +424,17 @@ Point2 Node2D::to_global(Point2 p_local) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Node2D::_notification(int p_notification) {
|
void Node2D::_notification(int p_notification) {
|
||||||
ERR_THREAD_GUARD;
|
|
||||||
switch (p_notification) {
|
switch (p_notification) {
|
||||||
case NOTIFICATION_ENTER_TREE: {
|
case NOTIFICATION_ENTER_TREE: {
|
||||||
|
ERR_MAIN_THREAD_GUARD;
|
||||||
|
|
||||||
if (get_viewport()) {
|
if (get_viewport()) {
|
||||||
get_parent()->connect(SNAME("child_order_changed"), callable_mp(get_viewport(), &Viewport::gui_set_root_order_dirty), CONNECT_REFERENCE_COUNTED);
|
get_parent()->connect(SNAME("child_order_changed"), callable_mp(get_viewport(), &Viewport::gui_set_root_order_dirty), CONNECT_REFERENCE_COUNTED);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
case NOTIFICATION_EXIT_TREE: {
|
case NOTIFICATION_EXIT_TREE: {
|
||||||
|
ERR_MAIN_THREAD_GUARD;
|
||||||
|
|
||||||
if (get_viewport()) {
|
if (get_viewport()) {
|
||||||
get_parent()->disconnect(SNAME("child_order_changed"), callable_mp(get_viewport(), &Viewport::gui_set_root_order_dirty));
|
get_parent()->disconnect(SNAME("child_order_changed"), callable_mp(get_viewport(), &Viewport::gui_set_root_order_dirty));
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,10 +131,9 @@ void Node3D::_propagate_transform_changed(Node3D *p_origin) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Node3D::_notification(int p_what) {
|
void Node3D::_notification(int p_what) {
|
||||||
ERR_THREAD_GUARD;
|
|
||||||
|
|
||||||
switch (p_what) {
|
switch (p_what) {
|
||||||
case NOTIFICATION_ENTER_TREE: {
|
case NOTIFICATION_ENTER_TREE: {
|
||||||
|
ERR_MAIN_THREAD_GUARD;
|
||||||
ERR_FAIL_NULL(get_tree());
|
ERR_FAIL_NULL(get_tree());
|
||||||
|
|
||||||
Node *p = get_parent();
|
Node *p = get_parent();
|
||||||
|
@ -163,6 +162,8 @@ void Node3D::_notification(int p_what) {
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case NOTIFICATION_EXIT_TREE: {
|
case NOTIFICATION_EXIT_TREE: {
|
||||||
|
ERR_MAIN_THREAD_GUARD;
|
||||||
|
|
||||||
notification(NOTIFICATION_EXIT_WORLD, true);
|
notification(NOTIFICATION_EXIT_WORLD, true);
|
||||||
if (xform_change.in_list()) {
|
if (xform_change.in_list()) {
|
||||||
get_tree()->xform_change_list.remove(&xform_change);
|
get_tree()->xform_change_list.remove(&xform_change);
|
||||||
|
@ -176,6 +177,8 @@ void Node3D::_notification(int p_what) {
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case NOTIFICATION_ENTER_WORLD: {
|
case NOTIFICATION_ENTER_WORLD: {
|
||||||
|
ERR_MAIN_THREAD_GUARD;
|
||||||
|
|
||||||
data.inside_world = true;
|
data.inside_world = true;
|
||||||
data.viewport = nullptr;
|
data.viewport = nullptr;
|
||||||
Node *parent = get_parent();
|
Node *parent = get_parent();
|
||||||
|
@ -198,6 +201,8 @@ void Node3D::_notification(int p_what) {
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case NOTIFICATION_EXIT_WORLD: {
|
case NOTIFICATION_EXIT_WORLD: {
|
||||||
|
ERR_MAIN_THREAD_GUARD;
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
clear_gizmos();
|
clear_gizmos();
|
||||||
#endif
|
#endif
|
||||||
|
@ -211,6 +216,8 @@ void Node3D::_notification(int p_what) {
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case NOTIFICATION_TRANSFORM_CHANGED: {
|
case NOTIFICATION_TRANSFORM_CHANGED: {
|
||||||
|
ERR_THREAD_GUARD;
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
for (int i = 0; i < data.gizmos.size(); i++) {
|
for (int i = 0; i < data.gizmos.size(); i++) {
|
||||||
data.gizmos.write[i]->transform();
|
data.gizmos.write[i]->transform();
|
||||||
|
|
|
@ -273,10 +273,9 @@ void CanvasItem::_exit_canvas() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CanvasItem::_notification(int p_what) {
|
void CanvasItem::_notification(int p_what) {
|
||||||
ERR_MAIN_THREAD_GUARD;
|
|
||||||
|
|
||||||
switch (p_what) {
|
switch (p_what) {
|
||||||
case NOTIFICATION_ENTER_TREE: {
|
case NOTIFICATION_ENTER_TREE: {
|
||||||
|
ERR_MAIN_THREAD_GUARD;
|
||||||
ERR_FAIL_COND(!is_inside_tree());
|
ERR_FAIL_COND(!is_inside_tree());
|
||||||
|
|
||||||
Node *parent = get_parent();
|
Node *parent = get_parent();
|
||||||
|
@ -336,6 +335,8 @@ void CanvasItem::_notification(int p_what) {
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case NOTIFICATION_EXIT_TREE: {
|
case NOTIFICATION_EXIT_TREE: {
|
||||||
|
ERR_MAIN_THREAD_GUARD;
|
||||||
|
|
||||||
if (xform_change.in_list()) {
|
if (xform_change.in_list()) {
|
||||||
get_tree()->xform_change_list.remove(&xform_change);
|
get_tree()->xform_change_list.remove(&xform_change);
|
||||||
}
|
}
|
||||||
|
@ -357,14 +358,20 @@ void CanvasItem::_notification(int p_what) {
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case NOTIFICATION_VISIBILITY_CHANGED: {
|
case NOTIFICATION_VISIBILITY_CHANGED: {
|
||||||
|
ERR_MAIN_THREAD_GUARD;
|
||||||
|
|
||||||
emit_signal(SceneStringNames::get_singleton()->visibility_changed);
|
emit_signal(SceneStringNames::get_singleton()->visibility_changed);
|
||||||
} break;
|
} break;
|
||||||
case NOTIFICATION_WORLD_2D_CHANGED: {
|
case NOTIFICATION_WORLD_2D_CHANGED: {
|
||||||
|
ERR_MAIN_THREAD_GUARD;
|
||||||
|
|
||||||
_exit_canvas();
|
_exit_canvas();
|
||||||
_enter_canvas();
|
_enter_canvas();
|
||||||
} break;
|
} break;
|
||||||
case NOTIFICATION_PARENTED: {
|
case NOTIFICATION_PARENTED: {
|
||||||
// The node is not inside the tree during this notification.
|
// The node is not inside the tree during this notification.
|
||||||
|
ERR_MAIN_THREAD_GUARD;
|
||||||
|
|
||||||
_notify_transform();
|
_notify_transform();
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue