A generic interface for components and other user interface objects that may
be enabled or disabled. The server will ignore incoming events for a disabled
element unless the listener has been explicitly configured to allow events in
a disabled state using e.g.
DomListenerRegistration#setDisabledUpdateMode(DisabledUpdateMode) or
Element#addSynchronizedProperty(String,DisabledUpdateMode).
Implementing classes should not define their own implementations of
the methods defined in this interface since the framework's overall security
capabilities are dependent on a correct implementation. Instead, the visual
representation of a disabled component can be configured by overriding
Component#onEnabledStateChanged(boolean).
An element may be implicitly or explicitly disabled.
- It is explicitly disabled if it's disabled via the
setEnabled(false) call.
- It is implicitly disabled if it has an ascendant which is explicitly
disabled.
An element is enabled if it's not explicitly disabled and there is no
disabled ascendant.
An implicitly disabled element becomes enabled automatically if its disabled
ascendant becomes enabled.
An element may be explicitly disabled when it is only implicitly disabled.
Such element remains disabled when its ascendant becomes enabled.
Note that an element may change its enabled state if it's inside a disabled
parent and it becomes detached from it. In this case if it has not been
explicitly disabled then it becomes enabled until it's attached. If the new
parent is enabled then the element remains enabled. Otherwise it becomes
disabled again.