diff --git a/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs b/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs index 02e3f68d739..d3b38c8da21 100644 --- a/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs +++ b/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs @@ -54,7 +54,7 @@ public TopLevelImpl(AvaloniaView avaloniaView, bool placeOnTop = false) { throw new ArgumentException("AvaloniaView.Context must not be null"); } - + _view = new ViewImpl(avaloniaView.Context, this, placeOnTop); _textInputMethod = new AndroidInputMethod(_view); _keyboardHelper = new AndroidKeyboardEventsHelper(this); @@ -85,7 +85,7 @@ public TopLevelImpl(AvaloniaView avaloniaView, bool placeOnTop = false) public virtual Size ClientSize => _view.Size.ToSize(RenderScaling); public Size? FrameSize => null; - + public Action? Closed { get; set; } public Action? Input { get; set; } @@ -136,7 +136,7 @@ public void SetInputRoot(IInputRoot inputRoot) { InputRoot = inputRoot; } - + public virtual void Show() { _view.Visibility = ViewStates.Visible; @@ -148,7 +148,7 @@ void Draw() { Paint?.Invoke(new Rect(new Point(0, 0), ClientSize)); } - + public virtual void Dispose() { _systemNavigationManager.Dispose(); @@ -264,11 +264,11 @@ public sealed override IInputConnection OnCreateInputConnection(EditorInfo? outA } public IPopupImpl? CreatePopup() => null; - + public Action? LostFocus { get; set; } public Action? TransparencyLevelChanged { get; set; } - public WindowTransparencyLevel TransparencyLevel + public WindowTransparencyLevel TransparencyLevel { get => _transparencyLevel; private set @@ -681,5 +681,29 @@ public override bool PerformEditorAction([GeneratedEnum] ImeAction actionCode) return extract; } + + public override bool PerformContextMenuAction(int id) + { + if (InputMethod.Client is not { } client) return false; + + switch (id) + { + case global::Android.Resource.Id.SelectAll: + client.ExecuteContextMenuAction(ContextMenuAction.SelectAll); + return true; + case global::Android.Resource.Id.Cut: + client.ExecuteContextMenuAction(ContextMenuAction.Cut); + return true; + case global::Android.Resource.Id.Copy: + client.ExecuteContextMenuAction(ContextMenuAction.Copy); + return true; + case global::Android.Resource.Id.Paste: + client.ExecuteContextMenuAction(ContextMenuAction.Paste); + return true; + default: + break; + } + return base.PerformContextMenuAction(id); + } } }