diff --git a/src/DynamoCore/Graph/Nodes/NodeModel.cs b/src/DynamoCore/Graph/Nodes/NodeModel.cs index 7a08b3f0fee..b7e1edaf75a 100644 --- a/src/DynamoCore/Graph/Nodes/NodeModel.cs +++ b/src/DynamoCore/Graph/Nodes/NodeModel.cs @@ -411,6 +411,10 @@ internal ObservableHashSet Infos get { return infos; } } + /// + /// BlockInfoBubbleUpdates is flag used to block InfoBubble updates during (or immediately after) graph execution. + /// + internal bool BlockInfoBubbleUpdates = false; /// /// A publicly accessible collector of all Info/Warning/Error data diff --git a/src/DynamoCore/Graph/Workspaces/HomeWorkspaceModel.cs b/src/DynamoCore/Graph/Workspaces/HomeWorkspaceModel.cs index 412a2e00891..ed38fdf765a 100644 --- a/src/DynamoCore/Graph/Workspaces/HomeWorkspaceModel.cs +++ b/src/DynamoCore/Graph/Workspaces/HomeWorkspaceModel.cs @@ -698,7 +698,11 @@ private void OnUpdateGraphCompleted(AsyncTask task) var node = workspace.Nodes.FirstOrDefault(n => n.GUID == guid); if (node == null) continue; + + // Block Infos updates during the many errors/warnings/notifications added here + // InfoBubbles will be updated on NodeViewModel's EvaluationCompleted handler. using (node.PropertyChangeManager.SetPropsToSuppress(nameof(NodeModel.Infos), nameof(NodeModel.State))) + using (Disposable.Create(() => { node.BlockInfoBubbleUpdates = true; }, () => { node.BlockInfoBubbleUpdates = false; })) { node.Warning(warning.Value); // Update node warning message. } @@ -711,7 +715,11 @@ private void OnUpdateGraphCompleted(AsyncTask task) var node = workspace.Nodes.FirstOrDefault(n => n.GUID == guid); if (node == null) continue; + + // Block Infos updates during the many errors/warnings/notifications added here + // InfoBubbles will be updated on NodeViewModel's EvaluationCompleted handler. using (node.PropertyChangeManager.SetPropsToSuppress(nameof(NodeModel.Infos), nameof(NodeModel.State))) + using (Disposable.Create(() => { node.BlockInfoBubbleUpdates = true; }, () => { node.BlockInfoBubbleUpdates = false; })) { node.Info(string.Join(Environment.NewLine, info.Value.Select(w => w.Message))); } diff --git a/src/DynamoCoreWpf/DynamoCoreWpf.csproj b/src/DynamoCoreWpf/DynamoCoreWpf.csproj index 97fac04cd36..637ce3aac8e 100644 --- a/src/DynamoCoreWpf/DynamoCoreWpf.csproj +++ b/src/DynamoCoreWpf/DynamoCoreWpf.csproj @@ -53,7 +53,7 @@ - + diff --git a/src/DynamoCoreWpf/Properties/Resources.en-US.resx b/src/DynamoCoreWpf/Properties/Resources.en-US.resx index 36320a32c8d..b01df364ba5 100644 --- a/src/DynamoCoreWpf/Properties/Resources.en-US.resx +++ b/src/DynamoCoreWpf/Properties/Resources.en-US.resx @@ -1350,7 +1350,7 @@ You can always redownload the package. The package or one of its dependencies contains Python scripts or binaries. Do you want to continue? - The package or one of its dependencies use a newer version of {0} than you are currently using. Do you want to continue? + This package or one of its dependencies were created for a newer version of Dynamo. It may not work in this version. Do you want to continue? You must select at least one custom node. @@ -3963,12 +3963,12 @@ To make this file into a new template, save it to a different folder, then move Dynamo 1.x file format - The package or one of its dependencies use an older version of {0} than you are currently using. Do you want to continue? + This package or one of its dependencies were created for a previous version of Dynamo. It may not work in this version. Do you want to continue? - Package may not work in this version of Dynamo {0}! + Package may not work in this version of {0}! #Learn more=https://primer2.dynamobim.org/1_developer_primer_intro/3_developing_for_dynamo/updating-your-packages-and-dynamo-libraries-for-dynamo-3x-net8 - + \ No newline at end of file diff --git a/src/DynamoCoreWpf/UI/Themes/Modern/DynamoModern.xaml b/src/DynamoCoreWpf/UI/Themes/Modern/DynamoModern.xaml index 474efa30ab6..32b3fdf8f62 100644 --- a/src/DynamoCoreWpf/UI/Themes/Modern/DynamoModern.xaml +++ b/src/DynamoCoreWpf/UI/Themes/Modern/DynamoModern.xaml @@ -4440,6 +4440,66 @@ + + + + +