diff --git a/Source/Editor/GUI/Timeline/Media.cs b/Source/Editor/GUI/Timeline/Media.cs
index 70783b449..6d6a4c5ea 100644
--- a/Source/Editor/GUI/Timeline/Media.cs
+++ b/Source/Editor/GUI/Timeline/Media.cs
@@ -229,8 +229,9 @@ namespace FlaxEditor.GUI.Timeline
/// Called when showing timeline context menu to the user. Can be used to add custom buttons.
///
/// The menu.
+ /// The time (in seconds) at which context menu is shown (user clicked on a timeline).
/// The found control under the mouse cursor.
- public virtual void OnTimelineShowContextMenu(ContextMenu.ContextMenu menu, Control controlUnderMouse)
+ public virtual void OnTimelineContextMenu(ContextMenu.ContextMenu menu, float time, Control controlUnderMouse)
{
if (CanDelete && Track.Media.Count > Track.MinMediaCount)
menu.AddButton("Delete media", Delete);
diff --git a/Source/Editor/GUI/Timeline/Timeline.cs b/Source/Editor/GUI/Timeline/Timeline.cs
index a89df1fc2..e254c7456 100644
--- a/Source/Editor/GUI/Timeline/Timeline.cs
+++ b/Source/Editor/GUI/Timeline/Timeline.cs
@@ -1901,6 +1901,9 @@ namespace FlaxEditor.GUI.Timeline
if (!ContainsFocus)
Focus();
+ var timelinePos = MediaPanel.PointFromParent(this, location);
+ var time = (timelinePos.X - StartOffset) / (UnitsPerSecond * Zoom);
+
var controlUnderMouse = GetChildAtRecursive(location);
var mediaUnderMouse = controlUnderMouse;
while (mediaUnderMouse != null && !(mediaUnderMouse is Media))
@@ -1911,12 +1914,23 @@ namespace FlaxEditor.GUI.Timeline
var menu = new ContextMenu.ContextMenu();
if (mediaUnderMouse is Media media)
{
- media.OnTimelineShowContextMenu(menu, controlUnderMouse);
+ media.OnTimelineContextMenu(menu, time, controlUnderMouse);
if (media.PropertiesEditObject != null)
{
menu.AddButton("Edit media", () => ShowEditPopup(media.PropertiesEditObject, location, media.Track));
}
}
+ else
+ {
+ foreach (var track in _tracks)
+ {
+ if (Mathf.IsInRange(timelinePos.Y, track.Top, track.Bottom))
+ {
+ track.OnTimelineContextMenu(menu, time);
+ break;
+ }
+ }
+ }
if (PropertiesEditObject != null)
{
menu.AddButton("Edit timeline", () => ShowEditPopup(PropertiesEditObject, location, this));
diff --git a/Source/Editor/GUI/Timeline/Track.cs b/Source/Editor/GUI/Timeline/Track.cs
index 935ab863a..485603808 100644
--- a/Source/Editor/GUI/Timeline/Track.cs
+++ b/Source/Editor/GUI/Timeline/Track.cs
@@ -1028,6 +1028,15 @@ namespace FlaxEditor.GUI.Timeline
return true;
}
+ ///
+ /// Called when showing timeline context menu to the user. Can be used to add custom buttons.
+ ///
+ /// The menu.
+ /// The time (in seconds) at which context menu is shown (user clicked on a timeline).
+ public virtual void OnTimelineContextMenu(ContextMenu.ContextMenu menu, float time)
+ {
+ }
+
///
/// Called when context menu is being prepared to show. Can be used to add custom options.
///
diff --git a/Source/Editor/GUI/Timeline/Tracks/CameraCutTrack.cs b/Source/Editor/GUI/Timeline/Tracks/CameraCutTrack.cs
index 3d731a321..3dd2a1fe2 100644
--- a/Source/Editor/GUI/Timeline/Tracks/CameraCutTrack.cs
+++ b/Source/Editor/GUI/Timeline/Tracks/CameraCutTrack.cs
@@ -324,12 +324,12 @@ namespace FlaxEditor.GUI.Timeline.Tracks
}
///
- public override void OnTimelineShowContextMenu(ContextMenu.ContextMenu menu, Control controlUnderMouse)
+ public override void OnTimelineContextMenu(ContextMenu.ContextMenu menu, float time, Control controlUnderMouse)
{
if (((CameraCutTrack)Track).Camera)
menu.AddButton("Refresh thumbnails", () => UpdateThumbnails());
- base.OnTimelineShowContextMenu(menu, controlUnderMouse);
+ base.OnTimelineContextMenu(menu, time, controlUnderMouse);
}
///
diff --git a/Source/Editor/GUI/Timeline/Tracks/ScreenFadeTrack.cs b/Source/Editor/GUI/Timeline/Tracks/ScreenFadeTrack.cs
index 13b5c6fbc..e07b419da 100644
--- a/Source/Editor/GUI/Timeline/Tracks/ScreenFadeTrack.cs
+++ b/Source/Editor/GUI/Timeline/Tracks/ScreenFadeTrack.cs
@@ -101,9 +101,9 @@ namespace FlaxEditor.GUI.Timeline.Tracks
}
///
- public override void OnTimelineShowContextMenu(ContextMenu.ContextMenu menu, Control controlUnderMouse)
+ public override void OnTimelineContextMenu(ContextMenu.ContextMenu menu, float time, Control controlUnderMouse)
{
- base.OnTimelineShowContextMenu(menu, controlUnderMouse);
+ base.OnTimelineContextMenu(menu, time, controlUnderMouse);
if (controlUnderMouse is GradientEditor.StopControl stop)
{