[PowerAccent] Cancel previous ShowToolbar task if a new one is triggered (#37757)

* Cancel previous ShowToolbar task if a new one is triggered

* more changes

* Fix space trigger starting at center

* Removed unneded code

* More changes

* Addressed feedback

* Fix another edge case
This commit is contained in:
Ionuț Manța
2025-04-22 20:03:05 -07:00
committed by GitHub
parent e8b02cd797
commit e1ad7e39c6
4 changed files with 53 additions and 25 deletions

View File

@@ -62,11 +62,11 @@ public partial class PowerAccent : IDisposable
private void SetEvents()
{
_keyboardListener.SetShowToolbarEvent(new PowerToys.PowerAccentKeyboardService.ShowToolbar((LetterKey letterKey) =>
_keyboardListener.SetShowToolbarEvent(new PowerToys.PowerAccentKeyboardService.ShowToolbar((LetterKey letterKey, TriggerKey trigger ) =>
{
System.Windows.Application.Current.Dispatcher.Invoke(() =>
{
ShowToolbar(letterKey);
ShowToolbar(letterKey, trigger);
});
}));
@@ -92,23 +92,15 @@ public partial class PowerAccent : IDisposable
}));
}
private void ShowToolbar(LetterKey letterKey)
private void ShowToolbar(LetterKey letterKey, TriggerKey trigger)
{
_visible = true;
_characters = GetCharacters(letterKey);
_characterDescriptions = GetCharacterDescriptions(_characters);
_showUnicodeDescription = _settingService.ShowUnicodeDescription;
Task.Delay(_settingService.InputTime).ContinueWith(
t =>
{
if (_visible)
{
OnChangeDisplay?.Invoke(true, _characters);
}
},
TaskScheduler.FromCurrentSynchronizationContext());
OnChangeDisplay?.Invoke(true, _characters);
ProcessNextChar(trigger, false);
}
private string[] GetCharacters(LetterKey letterKey)