diff --git a/src/ui/Features/Main/SubtitleLineViewModel.cs b/src/ui/Features/Main/SubtitleLineViewModel.cs
index 3c1ebd2d6fd..c337b1da735 100644
--- a/src/ui/Features/Main/SubtitleLineViewModel.cs
+++ b/src/ui/Features/Main/SubtitleLineViewModel.cs
@@ -595,6 +595,24 @@ internal void SetStartTimeOnly(TimeSpan timeSpan)
UpdateDuration();
}
+ ///
+ /// Sets start and end time together without ever publishing an invalid
+ /// intermediate state (e.g. start > end / negative duration). Updating
+ /// the two times separately can briefly expose such a state to the live
+ /// editor controls bound to the selected line; the duration up/down clamps
+ /// the negative value and writes it back, corrupting the end time. Suppress
+ /// notifications while both values are assigned, then recompute duration once.
+ ///
+ internal void SetTimes(TimeSpan startTime, TimeSpan endTime)
+ {
+ _skipUpdate = true;
+ StartTime = startTime;
+ EndTime = endTime;
+ _skipUpdate = false;
+
+ UpdateDuration();
+ }
+
internal void Adjust(double factor, double adjustmentInSeconds)
{
if (StartTime.IsMaxTime())
diff --git a/src/ui/Features/Sync/ChangeFrameRate/ChangeFrameRateViewModel.cs b/src/ui/Features/Sync/ChangeFrameRate/ChangeFrameRateViewModel.cs
index 99f08d7c99b..3a7051ab156 100644
--- a/src/ui/Features/Sync/ChangeFrameRate/ChangeFrameRateViewModel.cs
+++ b/src/ui/Features/Sync/ChangeFrameRate/ChangeFrameRateViewModel.cs
@@ -157,8 +157,9 @@ internal static void ChangeFrameRate(ObservableCollection
double ratio = fromFrameRate / toFrameRate;
foreach (var line in subtitles)
{
- line.SetStartTimeOnly(TimeSpan.FromMilliseconds(line.StartTime.TotalMilliseconds * ratio));
- line.EndTime = TimeSpan.FromMilliseconds(line.EndTime.TotalMilliseconds * ratio);
+ line.SetTimes(
+ TimeSpan.FromMilliseconds(line.StartTime.TotalMilliseconds * ratio),
+ TimeSpan.FromMilliseconds(line.EndTime.TotalMilliseconds * ratio));
}
}
}
\ No newline at end of file
diff --git a/src/ui/Features/Sync/ChangeSpeed/ChangeSpeedViewModel.cs b/src/ui/Features/Sync/ChangeSpeed/ChangeSpeedViewModel.cs
index e85664fc642..a09df7c792e 100644
--- a/src/ui/Features/Sync/ChangeSpeed/ChangeSpeedViewModel.cs
+++ b/src/ui/Features/Sync/ChangeSpeed/ChangeSpeedViewModel.cs
@@ -86,8 +86,10 @@ internal static void ChangeSpeed(ObservableCollection sub
{
foreach (var subtitle in subtitles)
{
- subtitle.SetStartTimeOnly(TimeSpan.FromMilliseconds(subtitle.StartTime.TotalMilliseconds * (100.0 / speedPercent)));
- subtitle.EndTime = TimeSpan.FromMilliseconds(subtitle.EndTime.TotalMilliseconds * (100.0 / speedPercent));
+ var factor = 100.0 / speedPercent;
+ subtitle.SetTimes(
+ TimeSpan.FromMilliseconds(subtitle.StartTime.TotalMilliseconds * factor),
+ TimeSpan.FromMilliseconds(subtitle.EndTime.TotalMilliseconds * factor));
}
}
}
\ No newline at end of file