| File: System\Windows\Forms\ToolTip\KeyboardToolTipStateMachine.ToolToTipDictionary.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms\System.Windows.Forms.csproj (System.Windows.Forms) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Runtime.CompilerServices; namespace System.Windows.Forms; internal sealed partial class KeyboardToolTipStateMachine { private sealed class ToolToTipDictionary { private readonly ConditionalWeakTable<IKeyboardToolTip, WeakReference<ToolTip?>> _table = []; public ToolTip? this[IKeyboardToolTip tool] { get { ToolTip? toolTip = null; if (_table.TryGetValue(tool, out WeakReference<ToolTip?>? toolTipReference)) { if (!toolTipReference.TryGetTarget(out toolTip)) { // removing dead reference _table.Remove(tool); } } return toolTip; } set { if (_table.TryGetValue(tool, out WeakReference<ToolTip?>? toolTipReference)) { toolTipReference.SetTarget(value); } else { _table.Add(tool, new WeakReference<ToolTip?>(value)); } } } public void Remove(IKeyboardToolTip tool, ToolTip toolTip) { if (_table.TryGetValue(tool, out WeakReference<ToolTip?>? toolTipReference)) { if (toolTipReference.TryGetTarget(out ToolTip? existingToolTip)) { if (existingToolTip == toolTip) { _table.Remove(tool); } } else { // removing dead reference _table.Remove(tool); } } } } }