1. Actually add a window into Window Stack when it shows up, not in instantiation stage.
2. Before showing a window, check if system state is DOWN. If so, initiate it firstly.
3. When making a window invisible, avoid shutting down the system. Shutting down is made when the last window is removed.