Thinking about it further, would it not make sense to have a `selected`/`deselected` boolean property?
widgets could just override `on_selected/deselected`?