diff --git a/src/Avalonia.Base/Styling/Activators/AndActivator.cs b/src/Avalonia.Base/Styling/Activators/AndActivator.cs index dafc6700e6..6ca9c10858 100644 --- a/src/Avalonia.Base/Styling/Activators/AndActivator.cs +++ b/src/Avalonia.Base/Styling/Activators/AndActivator.cs @@ -20,7 +20,7 @@ namespace Avalonia.Styling.Activators _sources.Add(activator); } - void IStyleActivatorSink.OnNext(bool value, int tag) => ReevaluateIsActive(); + void IStyleActivatorSink.OnNext(bool value) => ReevaluateIsActive(); protected override bool EvaluateIsActive() { @@ -44,11 +44,9 @@ namespace Avalonia.Styling.Activators { if (_sources is object) { - var i = 0; - foreach (var source in _sources) { - source.Subscribe(this, i++); + source.Subscribe(this); } } } diff --git a/src/Avalonia.Base/Styling/Activators/IStyleActivator.cs b/src/Avalonia.Base/Styling/Activators/IStyleActivator.cs index e8c33adf4d..e07534237a 100644 --- a/src/Avalonia.Base/Styling/Activators/IStyleActivator.cs +++ b/src/Avalonia.Base/Styling/Activators/IStyleActivator.cs @@ -9,11 +9,11 @@ namespace Avalonia.Styling.Activators /// /// A style activator is very similar to an `IObservable{bool}` but is optimized for the /// particular use-case of activating a style according to a selector. It differs from - /// an observable in two major ways: + /// an observable in three major ways: /// /// - Can only have a single subscription - /// - The subscription can have a tag associated with it, allowing a subscriber to index - /// into a list of subscriptions without having to allocate additional objects. + /// - The activation state can be re-evaluated at any time by calling + /// - No error or completion messages /// [Unstable] public interface IStyleActivator : IDisposable @@ -38,11 +38,10 @@ namespace Avalonia.Styling.Activators /// Subscribes to the activator. /// /// The listener. - /// An optional tag. /// /// This method should not call . /// - void Subscribe(IStyleActivatorSink sink, int tag = 0); + void Subscribe(IStyleActivatorSink sink); /// /// Unsubscribes from the activator. diff --git a/src/Avalonia.Base/Styling/Activators/IStyleActivatorSink.cs b/src/Avalonia.Base/Styling/Activators/IStyleActivatorSink.cs index fbb18dc304..142a3c3517 100644 --- a/src/Avalonia.Base/Styling/Activators/IStyleActivatorSink.cs +++ b/src/Avalonia.Base/Styling/Activators/IStyleActivatorSink.cs @@ -12,7 +12,6 @@ namespace Avalonia.Styling.Activators /// Called when the subscribed activator value changes. /// /// The new value. - /// The subscription tag. - void OnNext(bool value, int tag); + void OnNext(bool value); } } diff --git a/src/Avalonia.Base/Styling/Activators/NotActivator.cs b/src/Avalonia.Base/Styling/Activators/NotActivator.cs index 7067c2b727..83f026e479 100644 --- a/src/Avalonia.Base/Styling/Activators/NotActivator.cs +++ b/src/Avalonia.Base/Styling/Activators/NotActivator.cs @@ -7,9 +7,9 @@ { private readonly IStyleActivator _source; public NotActivator(IStyleActivator source) => _source = source; - void IStyleActivatorSink.OnNext(bool value, int tag) => ReevaluateIsActive(); + void IStyleActivatorSink.OnNext(bool value) => ReevaluateIsActive(); protected override bool EvaluateIsActive() => !_source.GetIsActive(); - protected override void Initialize() => _source.Subscribe(this, 0); + protected override void Initialize() => _source.Subscribe(this); protected override void Deinitialize() => _source.Unsubscribe(this); } } diff --git a/src/Avalonia.Base/Styling/Activators/OrActivator.cs b/src/Avalonia.Base/Styling/Activators/OrActivator.cs index 26c8df7f9c..056731695a 100644 --- a/src/Avalonia.Base/Styling/Activators/OrActivator.cs +++ b/src/Avalonia.Base/Styling/Activators/OrActivator.cs @@ -18,7 +18,7 @@ namespace Avalonia.Styling.Activators _sources.Add(activator); } - void IStyleActivatorSink.OnNext(bool value, int tag) => ReevaluateIsActive(); + void IStyleActivatorSink.OnNext(bool value) => ReevaluateIsActive(); protected override bool EvaluateIsActive() { @@ -38,11 +38,9 @@ namespace Avalonia.Styling.Activators { if (_sources is object) { - var i = 0; - foreach (var source in _sources) { - source.Subscribe(this, i++); + source.Subscribe(this); } } } diff --git a/src/Avalonia.Base/Styling/Activators/StyleActivatorBase.cs b/src/Avalonia.Base/Styling/Activators/StyleActivatorBase.cs index 94c91a9572..06848a7524 100644 --- a/src/Avalonia.Base/Styling/Activators/StyleActivatorBase.cs +++ b/src/Avalonia.Base/Styling/Activators/StyleActivatorBase.cs @@ -6,20 +6,18 @@ namespace Avalonia.Styling.Activators internal abstract class StyleActivatorBase : IStyleActivator { private IStyleActivatorSink? _sink; - private int _tag; private bool _value; public bool GetIsActive() => _value = EvaluateIsActive(); public bool IsSubscribed => _sink is not null; - public void Subscribe(IStyleActivatorSink sink, int tag = 0) + public void Subscribe(IStyleActivatorSink sink) { if (_sink is null) { Initialize(); _sink = sink; - _tag = tag; } else { @@ -70,14 +68,14 @@ namespace Avalonia.Styling.Activators if (value != _value) { _value = value; - _sink?.OnNext(value, _tag); + _sink?.OnNext(value); } return value; } /// - /// Called in response to a to allow the + /// Called in response to a to allow the /// derived class to set up any necessary subscriptions. /// protected abstract void Initialize(); diff --git a/src/Avalonia.Base/Styling/StyleInstance.cs b/src/Avalonia.Base/Styling/StyleInstance.cs index cc66a4bf22..2d7c695b32 100644 --- a/src/Avalonia.Base/Styling/StyleInstance.cs +++ b/src/Avalonia.Base/Styling/StyleInstance.cs @@ -79,7 +79,7 @@ namespace Avalonia.Styling public new void MakeShared() => base.MakeShared(); - void IStyleActivatorSink.OnNext(bool value, int tag) + void IStyleActivatorSink.OnNext(bool value) { Owner?.OnFrameActivationChanged(this); _animationTrigger?.OnNext(value); diff --git a/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Nesting.cs b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Nesting.cs index 931ffec90a..72df072ea6 100644 --- a/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Nesting.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Nesting.cs @@ -300,7 +300,7 @@ namespace Avalonia.Base.UnitTests.Styling public bool Active { get; private set; } - public void OnNext(bool value, int tag) => Active = value; + public void OnNext(bool value) => Active = value; } } } diff --git a/tests/Avalonia.Base.UnitTests/Styling/StyleActivatorExtensions.cs b/tests/Avalonia.Base.UnitTests/Styling/StyleActivatorExtensions.cs index 6b319615b9..e69eae43f0 100644 --- a/tests/Avalonia.Base.UnitTests/Styling/StyleActivatorExtensions.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/StyleActivatorExtensions.cs @@ -42,7 +42,7 @@ namespace Avalonia.Base.UnitTests.Styling observer.OnNext(_source.GetIsActive()); } - void IStyleActivatorSink.OnNext(bool value, int tag) + void IStyleActivatorSink.OnNext(bool value) { PublishNext(value); }