diff --git a/osu.Game/Screens/Edit/Setup/FileChooserLabelledTextBox.cs b/osu.Game/Screens/Edit/Setup/FileChooserLabelledTextBox.cs
index d1e35ae20d..aae19396db 100644
--- a/osu.Game/Screens/Edit/Setup/FileChooserLabelledTextBox.cs
+++ b/osu.Game/Screens/Edit/Setup/FileChooserLabelledTextBox.cs
@@ -11,11 +11,8 @@ using osu.Framework.Bindables;
using osu.Framework.Extensions;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
-using osu.Framework.Graphics.Cursor;
using osu.Framework.Graphics.UserInterface;
-using osu.Framework.Input.Events;
using osu.Game.Database;
-using osu.Game.Graphics.UserInterface;
using osu.Game.Graphics.UserInterfaceV2;
using osuTK;
@@ -24,7 +21,7 @@ namespace osu.Game.Screens.Edit.Setup
///
/// A labelled textbox which reveals an inline file chooser when clicked.
///
- internal class FileChooserLabelledTextBox : LabelledTextBox, ICanAcceptFiles, IHasPopover
+ internal class FileChooserLabelledTextBox : LabelledTextBoxWithPopover, ICanAcceptFiles
{
private readonly string[] handledExtensions;
@@ -40,16 +37,6 @@ namespace osu.Game.Screens.Edit.Setup
this.handledExtensions = handledExtensions;
}
- protected override OsuTextBox CreateTextBox() =>
- new FileChooserOsuTextBox
- {
- Anchor = Anchor.Centre,
- Origin = Anchor.Centre,
- RelativeSizeAxes = Axes.X,
- CornerRadius = CORNER_RADIUS,
- OnFocused = this.ShowPopover
- };
-
protected override void LoadComplete()
{
base.LoadComplete();
@@ -81,27 +68,7 @@ namespace osu.Game.Screens.Edit.Setup
game.UnregisterImportHandler(this);
}
- internal class FileChooserOsuTextBox : OsuTextBox
- {
- public Action OnFocused;
-
- protected override bool OnDragStart(DragStartEvent e)
- {
- // This text box is intended to be "read only" without actually specifying that.
- // As such we don't want to allow the user to select its content with a drag.
- return false;
- }
-
- protected override void OnFocus(FocusEvent e)
- {
- OnFocused?.Invoke();
- base.OnFocus(e);
-
- GetContainingInputManager().TriggerFocusContention(this);
- }
- }
-
- public Popover GetPopover() => new FileChooserPopover(handledExtensions, currentFile);
+ public override Popover GetPopover() => new FileChooserPopover(handledExtensions, currentFile);
private class FileChooserPopover : OsuPopover
{
diff --git a/osu.Game/Screens/Edit/Setup/LabelledTextBoxWithPopover.cs b/osu.Game/Screens/Edit/Setup/LabelledTextBoxWithPopover.cs
new file mode 100644
index 0000000000..1136675347
--- /dev/null
+++ b/osu.Game/Screens/Edit/Setup/LabelledTextBoxWithPopover.cs
@@ -0,0 +1,49 @@
+// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
+// See the LICENCE file in the repository root for full licence text.
+
+using System;
+using osu.Framework.Extensions;
+using osu.Framework.Graphics;
+using osu.Framework.Graphics.Cursor;
+using osu.Framework.Graphics.UserInterface;
+using osu.Framework.Input.Events;
+using osu.Game.Graphics.UserInterface;
+using osu.Game.Graphics.UserInterfaceV2;
+
+namespace osu.Game.Screens.Edit.Setup
+{
+ internal abstract class LabelledTextBoxWithPopover : LabelledTextBox, IHasPopover
+ {
+ public abstract Popover GetPopover();
+
+ protected override OsuTextBox CreateTextBox() =>
+ new PopoverTextBox
+ {
+ Anchor = Anchor.Centre,
+ Origin = Anchor.Centre,
+ RelativeSizeAxes = Axes.X,
+ CornerRadius = CORNER_RADIUS,
+ OnFocused = this.ShowPopover
+ };
+
+ internal class PopoverTextBox : OsuTextBox
+ {
+ public Action OnFocused;
+
+ protected override bool OnDragStart(DragStartEvent e)
+ {
+ // This text box is intended to be "read only" without actually specifying that.
+ // As such we don't want to allow the user to select its content with a drag.
+ return false;
+ }
+
+ protected override void OnFocus(FocusEvent e)
+ {
+ OnFocused?.Invoke();
+ base.OnFocus(e);
+
+ GetContainingInputManager().TriggerFocusContention(this);
+ }
+ }
+ }
+}