diff --git a/ShareX.HelpersLib/Properties/Resources.Designer.cs b/ShareX.HelpersLib/Properties/Resources.Designer.cs
index 2542a16c2..947f11161 100644
--- a/ShareX.HelpersLib/Properties/Resources.Designer.cs
+++ b/ShareX.HelpersLib/Properties/Resources.Designer.cs
@@ -1759,7 +1759,7 @@ internal class Resources {
}
///
- /// Looks up a localized string similar to Scrolling capture.
+ /// Looks up a localized string similar to Start/Stop scrolling capture.
///
internal static string HotkeyType_ScrollingCapture {
get {
diff --git a/ShareX.HelpersLib/Properties/Resources.resx b/ShareX.HelpersLib/Properties/Resources.resx
index a6ea116eb..6afdee429 100644
--- a/ShareX.HelpersLib/Properties/Resources.resx
+++ b/ShareX.HelpersLib/Properties/Resources.resx
@@ -187,7 +187,7 @@
1 Hour
- Scrolling capture
+ Start/Stop scrolling capture
Auto increment alphanumeric case-sensitive (0 pad left using {n})
diff --git a/ShareX.HelpersLib/Properties/Resources.tr.resx b/ShareX.HelpersLib/Properties/Resources.tr.resx
index 0fa1ee95d..77e9c7e6d 100644
--- a/ShareX.HelpersLib/Properties/Resources.tr.resx
+++ b/ShareX.HelpersLib/Properties/Resources.tr.resx
@@ -646,7 +646,7 @@ Dosya boyutu: {2:n0} / {3:n0} KB
Bilgisayar
- Kaydırarak yakalama
+ Kaydırarak yakalamayı başlat/durdur
Resim birleştirici
diff --git a/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.cs b/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.cs
index 31ff649b8..d8cd727ff 100644
--- a/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.cs
+++ b/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.cs
@@ -34,6 +34,10 @@ namespace ShareX.ScreenCaptureLib
{
public partial class ScrollingCaptureForm : Form
{
+ private static readonly object lockObject = new object();
+
+ private static ScrollingCaptureForm instance;
+
public event Action UploadRequested;
public ScrollingCaptureOptions Options { get; private set; }
@@ -41,7 +45,7 @@ public partial class ScrollingCaptureForm : Form
private ScrollingCaptureManager manager;
private Point dragStartPosition;
- public ScrollingCaptureForm(ScrollingCaptureOptions options)
+ private ScrollingCaptureForm(ScrollingCaptureOptions options)
{
Options = options;
@@ -51,6 +55,43 @@ public ScrollingCaptureForm(ScrollingCaptureOptions options)
manager = new ScrollingCaptureManager(Options);
}
+ public static async Task StartStopScrollingCapture(ScrollingCaptureOptions options, Action uploadRequested = null)
+ {
+ if (instance == null || instance.IsDisposed)
+ {
+ lock (lockObject)
+ {
+ if (instance == null || instance.IsDisposed)
+ {
+ instance = new ScrollingCaptureForm(options);
+
+ if (uploadRequested != null)
+ {
+ instance.UploadRequested += uploadRequested;
+ }
+
+ instance.Show();
+ }
+ }
+ }
+ else
+ {
+ await instance.StartStopScrollingCapture();
+ }
+ }
+
+ public async Task StartStopScrollingCapture()
+ {
+ if (manager.IsCapturing)
+ {
+ manager.StopCapture();
+ }
+ else
+ {
+ await SelectWindow();
+ }
+ }
+
protected override void Dispose(bool disposing)
{
if (disposing)
diff --git a/ShareX/Forms/MainForm.cs b/ShareX/Forms/MainForm.cs
index da877f947..cd524aabd 100644
--- a/ShareX/Forms/MainForm.cs
+++ b/ShareX/Forms/MainForm.cs
@@ -1621,9 +1621,9 @@ private void tsmiScreenRecordingGIF_Click(object sender, EventArgs e)
TaskHelpers.StartScreenRecording(ScreenRecordOutput.GIF, ScreenRecordStartMethod.Region);
}
- private void tsmiScrollingCapture_Click(object sender, EventArgs e)
+ private async void tsmiScrollingCapture_Click(object sender, EventArgs e)
{
- TaskHelpers.OpenScrollingCapture();
+ await TaskHelpers.OpenScrollingCapture();
}
private void tsmiAutoCapture_Click(object sender, EventArgs e)
diff --git a/ShareX/TaskHelpers.cs b/ShareX/TaskHelpers.cs
index c7e946f23..a3eefaebb 100644
--- a/ShareX/TaskHelpers.cs
+++ b/ShareX/TaskHelpers.cs
@@ -129,7 +129,7 @@ public static async Task ExecuteJob(TaskSettings taskSettings, HotkeyType job, C
new CaptureLastRegion().Capture(safeTaskSettings);
break;
case HotkeyType.ScrollingCapture:
- OpenScrollingCapture(safeTaskSettings);
+ await OpenScrollingCapture(safeTaskSettings);
break;
case HotkeyType.AutoCapture:
OpenAutoCapture(safeTaskSettings);
@@ -692,13 +692,12 @@ public static void AbortScreenRecording()
ScreenRecordManager.AbortRecording();
}
- public static void OpenScrollingCapture(TaskSettings taskSettings = null)
+ public static async Task OpenScrollingCapture(TaskSettings taskSettings = null)
{
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
- ScrollingCaptureForm scrollingCaptureForm = new ScrollingCaptureForm(taskSettings.CaptureSettingsReference.ScrollingCaptureOptions);
- scrollingCaptureForm.UploadRequested += img => UploadManager.RunImageTask(img, taskSettings);
- scrollingCaptureForm.Show();
+ await ScrollingCaptureForm.StartStopScrollingCapture(taskSettings.CaptureSettingsReference.ScrollingCaptureOptions,
+ img => UploadManager.RunImageTask(img, taskSettings));
}
public static void OpenAutoCapture(TaskSettings taskSettings = null)