Port "remove ContextMenu owner" fix from 4.8 #5843
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Addresses #5835
This is a port of a servicing fix in .NET 4.7-4.8.
Description
There are two reasons the context menu does not display. The first reason is that its owner gets removed from the tree after the right-button-up gesture but before the PopupControlService initiates the display logic. The logic notices that the owner is not being displayed, and therefore doesn't display the context menu. This is by design - you shouldn't display a context menu for an element that isn't itself visible.
The second reason is that the (shared) context menu is in a bad state, where it's marked IsOpen=true, but isn't actually being displayed. The display logic doesn't do anything, since it thinks the menu is already open. This is a bug, left over from the first case, which doesn't reset IsOpen to false when it aborts the display logic. The net effect is that once a context menu doesn't open because of reason 1, it will never open again, even in cases where it should.
The fix is to reset the context menu's state when aborting the display logic.
Customer Impact
ContextMenus stop working
Regression
No
Testing
Ad-hoc around customer scenario.
Standard regression testing.
Risk
Low. Port of a .NETFx servicing fix released earlier this year.