diff --git a/Terminal.Gui/Views/SpinnerView/SpinnerView.cs b/Terminal.Gui/Views/SpinnerView/SpinnerView.cs
index 25ae37ec0..f4b45690a 100644
--- a/Terminal.Gui/Views/SpinnerView/SpinnerView.cs
+++ b/Terminal.Gui/Views/SpinnerView/SpinnerView.cs
@@ -190,9 +190,23 @@ namespace Terminal.Gui {
}
///
- /// Automates spinning
+ /// Gets or sets whether spinning should occur automatically or be manually
+ /// triggered (e.g. from a background task).
///
- public void AutoSpin ()
+ public bool AutoSpin {
+ get {
+ return _timeout != null;
+ }
+ set {
+ if (value) {
+ AddAutoSpinTimeout ();
+ } else {
+ RemoveAutoSpinTimeout ();
+ }
+ }
+ }
+
+ private void AddAutoSpinTimeout ()
{
if (_timeout != null) {
return;
@@ -205,13 +219,22 @@ namespace Terminal.Gui {
});
}
- ///
- protected override void Dispose (bool disposing)
+
+ private void RemoveAutoSpinTimeout ()
{
if (_timeout != null) {
Application.MainLoop.RemoveTimeout (_timeout);
_timeout = null;
}
+ }
+
+
+
+
+ ///
+ protected override void Dispose (bool disposing)
+ {
+ RemoveAutoSpinTimeout ();
base.Dispose (disposing);
}
diff --git a/UICatalog/Scenarios/CharacterMap.cs b/UICatalog/Scenarios/CharacterMap.cs
index bb8c8a4d1..ca1d79234 100644
--- a/UICatalog/Scenarios/CharacterMap.cs
+++ b/UICatalog/Scenarios/CharacterMap.cs
@@ -516,7 +516,7 @@ class CharMap : ScrollView {
Style = new SpinnerStyle.Aesthetic (),
};
- spinner.AutoSpin ();
+ spinner.AutoSpin = true;
waitIndicator.Add (errorLabel);
waitIndicator.Add (spinner);
waitIndicator.Ready += async (s, a) => {
diff --git a/UICatalog/Scenarios/SpinnerStyles.cs b/UICatalog/Scenarios/SpinnerStyles.cs
index 792fd7084..dbd8a8fe1 100644
--- a/UICatalog/Scenarios/SpinnerStyles.cs
+++ b/UICatalog/Scenarios/SpinnerStyles.cs
@@ -39,7 +39,7 @@ namespace UICatalog.Scenarios {
Y = 0
};
preview.Add (spinner);
- spinner.AutoSpin ();
+ spinner.AutoSpin = true;
var ckbAscii = new CheckBox ("Ascii Only", false) {
X = Pos.Center () - 7,
diff --git a/UnitTests/Views/SpinnerViewTests.cs b/UnitTests/Views/SpinnerViewTests.cs
index fe727fa2e..32107ff4d 100644
--- a/UnitTests/Views/SpinnerViewTests.cs
+++ b/UnitTests/Views/SpinnerViewTests.cs
@@ -13,24 +13,33 @@ namespace Terminal.Gui.ViewsTests {
this.output = output;
}
- [Fact, AutoInitShutdown]
- public void TestSpinnerView_AutoSpin()
+ [Theory, AutoInitShutdown]
+ [InlineData(true)]
+ [InlineData(false)]
+ public void TestSpinnerView_AutoSpin(bool callStop)
{
var view = GetSpinnerView ();
Assert.Empty (Application.MainLoop.timeouts);
- view.AutoSpin ();
+ view.AutoSpin = true;
Assert.NotEmpty (Application.MainLoop.timeouts);
//More calls to AutoSpin do not add more timeouts
Assert.Single (Application.MainLoop.timeouts);
- view.AutoSpin ();
- view.AutoSpin ();
- view.AutoSpin ();
+ view.AutoSpin = true;
+ view.AutoSpin = true;
+ view.AutoSpin = true;
Assert.Single (Application.MainLoop.timeouts);
+ if(callStop) {
+ view.AutoSpin = false;
+ Assert.Empty (Application.MainLoop.timeouts);
+ }
+ else {
+ Assert.NotEmpty (Application.MainLoop.timeouts);
+ }
+
// Dispose clears timeout
- Assert.NotEmpty (Application.MainLoop.timeouts);
view.Dispose ();
Assert.Empty (Application.MainLoop.timeouts);
}