System\Windows\Forms\ToolTip\KeyboardToolTipStateMachine.cs (33)
44private SmState _currentState = SmState.Hidden;
55private SmState Transition(IKeyboardToolTip tool, ToolTip tooltip, SmEvent @event)
58(SmState.Hidden, SmEvent.FocusedTool) => SetupInitShowTimer(tool, tooltip),
59(SmState.Hidden, SmEvent.LeftTool) => _currentState, // OK
60(SmState.ReadyForInitShow, SmEvent.FocusedTool) => _currentState, // unlikely: focus without leave
61(SmState.ReadyForInitShow, SmEvent.LeftTool) => FullFsmReset(),
62(SmState.ReadyForInitShow, SmEvent.InitialDelayTimerExpired) => ShowToolTip(tool, tooltip),
64(SmState.Shown, SmEvent.FocusedTool) => _currentState, // unlikely: focus without leave
65(SmState.Shown, SmEvent.LeftTool) => HideAndStartWaitingForRefocus(tool, tooltip),
66(SmState.Shown, SmEvent.DismissTooltips) => FullFsmReset(),
68(SmState.WaitForRefocus, SmEvent.FocusedTool) => SetupReshowTimer(tool, tooltip),
69(SmState.WaitForRefocus, SmEvent.LeftTool) => _currentState, // OK
70(SmState.WaitForRefocus, SmEvent.RefocusWaitDelayExpired) => FullFsmReset(),
72(SmState.ReadyForReshow, SmEvent.FocusedTool) => _currentState, // unlikely: focus without leave
73(SmState.ReadyForReshow, SmEvent.LeftTool) => StartWaitingForRefocus(tool),
74(SmState.ReadyForReshow, SmEvent.ReshowDelayTimerExpired) => ShowToolTip(tool, tooltip),
159private SmState HideAndStartWaitingForRefocus(IKeyboardToolTip tool, ToolTip toolTip)
169private SmState StartWaitingForRefocus(IKeyboardToolTip tool)
176if (toolObject is not null && _currentState == SmState.WaitForRefocus && _refocusDelayExpirationCallback == expirationCallback)
182return SmState.WaitForRefocus;
185private SmState SetupReshowTimer(IKeyboardToolTip tool, ToolTip toolTip)
191return SmState.ReadyForReshow;
194private SmState ShowToolTip(IKeyboardToolTip tool, ToolTip toolTip)
204return SmState.Shown;
219return SmState.Shown;
222private SmState SetupInitShowTimer(IKeyboardToolTip tool, ToolTip toolTip)
229return SmState.ReadyForInitShow;
290if (_currentState != SmState.Shown || _currentTool is null)
302_currentState = SmState.Hidden;
306private SmState FullFsmReset()
308if (_currentState == SmState.Shown && _currentTool is not null)
316return _currentState = SmState.Hidden;