diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4cab477..6b05068 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -25,6 +25,7 @@ Fixes
### MLEM.Ui
Additions
- Added Panel.IsVisible method to check if a child element is visible
+- Added TextField.OnEnterPressed event
## 7.1.1
diff --git a/MLEM.Ui/Elements/TextField.cs b/MLEM.Ui/Elements/TextField.cs
index 40600aa..d2ec003 100644
--- a/MLEM.Ui/Elements/TextField.cs
+++ b/MLEM.Ui/Elements/TextField.cs
@@ -142,6 +142,13 @@ namespace MLEM.Ui.Elements {
///
public string MobileDescription;
///
+ /// An event that is invoked if is pressed while this text field is active.
+ /// Note that, for text fields that are , this is ignored.
+ /// This also occurs once the text input window is successfully closed on a mobile device.
+ /// If another 's press behavior should be invoked when enter is pressed, can be used instead.
+ ///
+ public GenericCallback OnEnterPressed;
+ ///
/// An element that should be pressed (using ) if is pressed while this text field is active.
/// Note that, for text fields that are , this is ignored.
/// This also occurs once the text input window is successfully closed on a mobile device.
@@ -198,12 +205,12 @@ namespace MLEM.Ui.Elements {
var result = await MlemPlatform.Current.OpenOnScreenKeyboard(title, this.MobileDescription, this.Text, false);
if (result != null) {
this.SetText(this.Multiline ? result : result.Replace('\n', ' '), true);
- this.EnterReceiver?.Controls?.PressElement(this.EnterReceiver);
+ this.InvokeOnEnter();
}
};
this.OnTextInput += (element, key, character) => {
if (this.IsSelectedActive && !this.IsHidden && !this.textInput.OnTextInput(key, character) && key == Keys.Enter && !this.Multiline)
- this.EnterReceiver?.Controls?.PressElement(this.EnterReceiver);
+ this.InvokeOnEnter();
};
}
@@ -221,8 +228,8 @@ namespace MLEM.Ui.Elements {
this.textInput.Update(time, this.Input);
#if FNA
// this occurs in OnTextInput outside FNA, where special keys are also counted as text input
- if (this.EnterReceiver != null && !this.Multiline && this.Input.TryConsumePressed(Keys.Enter))
- this.EnterReceiver.Controls?.PressElement(this.EnterReceiver);
+ if ((this.OnEnterPressed != null || this.EnterReceiver != null) && !this.Multiline && this.Input.TryConsumePressed(Keys.Enter))
+ this.InvokeOnEnter();
#endif
}
}
@@ -276,6 +283,11 @@ namespace MLEM.Ui.Elements {
this.CaretWidth = this.CaretWidth.OrStyle(style.TextFieldCaretWidth);
}
+ private void InvokeOnEnter() {
+ this.OnEnterPressed?.Invoke(this);
+ this.EnterReceiver?.Controls?.PressElement(this.EnterReceiver);
+ }
+
///
/// A delegate method used for
///