diff --git a/src/DynamoCoreWpf/Views/Core/DynamoView.xaml.cs b/src/DynamoCoreWpf/Views/Core/DynamoView.xaml.cs index 0970d83f004..02ee15bca2d 100644 --- a/src/DynamoCoreWpf/Views/Core/DynamoView.xaml.cs +++ b/src/DynamoCoreWpf/Views/Core/DynamoView.xaml.cs @@ -1589,7 +1589,11 @@ private void HidePopupWhenWindowDeactivated(object obj) { var workspace = this.ChildOfType(); if (workspace != null) + { workspace.HideAllPopUp(obj); + workspace.DestroyPortContextMenu(); + } + } private void TrackStartupAnalytics() diff --git a/src/DynamoCoreWpf/Views/Core/WorkspaceView.xaml.cs b/src/DynamoCoreWpf/Views/Core/WorkspaceView.xaml.cs index f1efcd7074c..f1c0116be4d 100644 --- a/src/DynamoCoreWpf/Views/Core/WorkspaceView.xaml.cs +++ b/src/DynamoCoreWpf/Views/Core/WorkspaceView.xaml.cs @@ -108,6 +108,11 @@ public WorkspaceView() InitializeComponent(); + Loaded += WorkspaceView_Loaded; + Unloaded += WorkspaceView_Unloaded; + + LostFocus += WorkspaceView_LostFocus; + DataContextChanged += OnWorkspaceViewDataContextChanged; // view of items to drag @@ -119,6 +124,11 @@ public WorkspaceView() dictionaries.Add(SharedDictionaryManager.DataTemplatesDictionary); } + private void WorkspaceView_LostFocus(object sender, RoutedEventArgs e) + { + DestroyPortContextMenu(); + } + void ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e) { switch (e.PropertyName) @@ -906,8 +916,8 @@ private void OnCanvasMouseDown(object sender, MouseButtonEventArgs e) InCanvasSearchBar.IsOpen = false; if (GeoScalingPopup != null) GeoScalingPopup.IsOpen = false; - - if(PortContextMenu.IsOpen) DestroyPortContextMenu(); + + if (PortContextMenu.IsOpen) DestroyPortContextMenu(); if (!ViewModel.IsConnecting && !ViewModel.IsPanning && e.MiddleButton == MouseButtonState.Pressed) { @@ -915,11 +925,38 @@ private void OnCanvasMouseDown(object sender, MouseButtonEventArgs e) } } + private void WorkspaceView_Loaded(object sender, RoutedEventArgs e) + { + var ownerWindow = Window.GetWindow(this); + if (ownerWindow != null) + { + ownerWindow.Deactivated += OwnerWindow_Deactivated; + } + } + + private void WorkspaceView_Unloaded(object sender, RoutedEventArgs e) + { + var ownerWindow = Window.GetWindow(this); + if (ownerWindow != null) + { + ownerWindow.Deactivated -= OwnerWindow_Deactivated; + } + } + + /// + /// When the Dynamo/Revit window loses focus, close the port context menu + /// so it doesn't float above other windows. + /// + private void OwnerWindow_Deactivated(object sender, EventArgs e) + { + DestroyPortContextMenu(); + } + /// /// Closes the port's context menu and sets its references to null. /// - private void DestroyPortContextMenu() => PortContextMenu.IsOpen = false; - + internal void DestroyPortContextMenu() => PortContextMenu.IsOpen = false; + private void OnMouseRelease(object sender, MouseButtonEventArgs e) { if (e == null) return; // in certain bizarre cases, e can be null @@ -1261,6 +1298,10 @@ private void OnGeometryScaling_Click(object sender, RoutedEventArgs e) public void Dispose() { RemoveViewModelsubscriptions(ViewModel); + + Loaded -= WorkspaceView_Loaded; + Unloaded -= WorkspaceView_Unloaded; + LostFocus -= WorkspaceView_LostFocus; DataContextChanged -= OnWorkspaceViewDataContextChanged; } }