--- /dev/null
+# X11 Client Window State Management:
+
+ MapRequest ->Normal/Withdrawn:
+ If window already tracked
+ Show the window and frame
+ Send expose event to window
+ else
+ Create new client struct
+ Read the window properties
+ Reparent the window to a frame if applicable
+ Move window to current workspace tiled or floating
+ Send expose event to window
+
+ UnmapNotify ->Withdrawn/Iconified:
+ if shaded -> Iconified
+ Iconified: Keep window where it is, show only titlebar
+ else if unloaded
+ Withdrawn: Keep window where it is but unmapped
+ else
+ Withdrawn: Remove window from workspace.
+
+ DestroyNotify ->Destroyed
+ Window is destroyed. Free all resources.
+
+
+# Window States
+
+## ICCM
+
+* Withdrawn - unmapped, not visible
+* Normal - client wants it mapped, might be hidden due to workspace management
+* Iconic - client wants it mapped but iconified, might be hidden due to workspace management
+
+## Internal
+
+* Window has been created but never been mapped
+* Window is floating and mapped to a visible workspace
+* Window is floating and mapped to a hidden workspace
+* Window is tiled and mapped to a visible workspace
+* Window is tiled and mapped to a hidden workspace
+* Window is tiled and shaded and mapped to a visible workspace
+* Window is tiled and shaded and mapped to a hidden workspace
+* Window is a transient window mapped to a visible workspace (that contains it's parent)
+* Window is a transient window mapped to a hidden workspace (that contains it's parent)