I'm also of the opinion that it doesn't hurt to have 'hidden' as a surface state. Shells do not have to use it if they don't want to.
One problem that I noticed in the implementation is that set_hidden() gets called from within set_state(). Both of these notify the observers. Essentially we are reporting the same event twice.
I suggest we do away with 'hidden_set_to' since now that hidden is a state, it'll be reported as the others through set_state. However, that'd mean show() and hide() would no longer trigger 'hidden_set_to' to the observers. Not sure if that's something we want to keep. So something needs to be done about them as well.
I'm also of the opinion that it doesn't hurt to have 'hidden' as a surface state. Shells do not have to use it if they don't want to.
One problem that I noticed in the implementation is that set_hidden() gets called from within set_state(). Both of these notify the observers. Essentially we are reporting the same event twice.
I suggest we do away with 'hidden_set_to' since now that hidden is a state, it'll be reported as the others through set_state. However, that'd mean show() and hide() would no longer trigger 'hidden_set_to' to the observers. Not sure if that's something we want to keep. So something needs to be done about them as well.