diff --git a/osu.Game/Rulesets/Edit/SelectionBlueprint.cs b/osu.Game/Rulesets/Edit/SelectionBlueprint.cs
index 4abdbfc244..f3816f6218 100644
--- a/osu.Game/Rulesets/Edit/SelectionBlueprint.cs
+++ b/osu.Game/Rulesets/Edit/SelectionBlueprint.cs
@@ -120,6 +120,11 @@ namespace osu.Game.Rulesets.Edit
///
public void Deselect() => State = SelectionState.NotSelected;
+ ///
+ /// Toggles the selection state of this .
+ ///
+ public void ToggleSelection() => State = IsSelected ? SelectionState.NotSelected : SelectionState.Selected;
+
public bool IsSelected => State == SelectionState.Selected;
///
diff --git a/osu.Game/Screens/Edit/Compose/Components/SelectionHandler.cs b/osu.Game/Screens/Edit/Compose/Components/SelectionHandler.cs
index f0a9e69321..9cddb69d0b 100644
--- a/osu.Game/Screens/Edit/Compose/Components/SelectionHandler.cs
+++ b/osu.Game/Screens/Edit/Compose/Components/SelectionHandler.cs
@@ -14,7 +14,6 @@ using osu.Framework.Graphics.Shapes;
using osu.Framework.Graphics.UserInterface;
using osu.Framework.Input;
using osu.Framework.Input.Bindings;
-using osu.Framework.Input.Events;
using osu.Framework.Input.States;
using osu.Game.Audio;
using osu.Game.Graphics;
@@ -225,38 +224,22 @@ namespace osu.Game.Screens.Edit.Compose.Components
/// The blueprint.
/// The input state at the point of selection.
internal void HandleSelectionRequested(SelectionBlueprint blueprint, InputState state)
- {
- if (!shiftClickDeleteCheck(blueprint, state))
- handleMultiSelection(blueprint, state);
- }
-
- private void handleMultiSelection(SelectionBlueprint blueprint, InputState state)
- {
- if (state.Keyboard.ControlPressed)
- {
- if (blueprint.IsSelected)
- blueprint.Deselect();
- else
- blueprint.Select();
- }
- else
- {
- if (blueprint.IsSelected)
- return;
-
- DeselectAll?.Invoke();
- blueprint.Select();
- }
- }
-
- private bool shiftClickDeleteCheck(SelectionBlueprint blueprint, InputState state)
{
if (state.Keyboard.ShiftPressed && state.Mouse.IsPressed(MouseButton.Right))
- {
EditorBeatmap.Remove(blueprint.HitObject);
- return true;
- }
- return false;
+ else if (state.Keyboard.ControlPressed)
+ blueprint.ToggleSelection();
+ else
+ ensureSelected(blueprint);
+ }
+
+ private void ensureSelected(SelectionBlueprint blueprint)
+ {
+ if (blueprint.IsSelected)
+ return;
+
+ DeselectAll?.Invoke();
+ blueprint.Select();
}
private void deleteSelected()