legacy "check" and "toggle" widgets operate differently:
- check emits only the "toggle" event
- toggle emits "toggle", "on", "off"
legacy also must not emit events when the widget's state is changed
to handle this effectively, check whether the event has been emitted for
each state when the signal is emitted from the theme, and track this
for subsequent uses to ensure that exactly one event is triggered
when it should be