diff --git a/src/Avalonia.Base/Input/TextInput/TextInputMethodClient.cs b/src/Avalonia.Base/Input/TextInput/TextInputMethodClient.cs index b31b7df8ef..ca91b861a8 100644 --- a/src/Avalonia.Base/Input/TextInput/TextInputMethodClient.cs +++ b/src/Avalonia.Base/Input/TextInput/TextInputMethodClient.cs @@ -64,6 +64,12 @@ namespace Avalonia.Input.TextInput /// public virtual void SetPreeditText(string? preeditText) { } + /// + /// Execute specific context menu actions + /// + /// The to perform + public virtual void ExecuteContextMenuAction(ContextMenuAction action) { } + /// /// Sets the non-committed input string and cursor offset in that string /// @@ -101,4 +107,12 @@ namespace Avalonia.Input.TextInput } public record struct TextSelection(int Start, int End); + + public enum ContextMenuAction + { + Copy, + Cut, + Paste, + SelectAll + } } diff --git a/src/Avalonia.Controls/TextBoxTextInputMethodClient.cs b/src/Avalonia.Controls/TextBoxTextInputMethodClient.cs index d482be8024..0ff857985a 100644 --- a/src/Avalonia.Controls/TextBoxTextInputMethodClient.cs +++ b/src/Avalonia.Controls/TextBoxTextInputMethodClient.cs @@ -201,6 +201,27 @@ namespace Avalonia.Controls return lineText; } + public override void ExecuteContextMenuAction(ContextMenuAction action) + { + base.ExecuteContextMenuAction(action); + + switch (action) + { + case ContextMenuAction.Copy: + _parent?.Copy(); + break; + case ContextMenuAction.Cut: + _parent?.Cut(); + break; + case ContextMenuAction.Paste: + _parent?.Paste(); + break; + case ContextMenuAction.SelectAll: + _parent?.SelectAll(); + break; + } + } + private void OnParentPropertyChanged(object? sender, AvaloniaPropertyChangedEventArgs e) { if (e.Property == TextBox.TextProperty)