The XDestroyWindow function destroys the specified
window as well as all of its subwindows and causes the X server to generate
a DestroyNotify event for each window. The window should never be referenced
again. If the window specified by the w argument is mapped, it is unmapped
automatically. The ordering of the DestroyNotify events is such that for
any given window being destroyed, DestroyNotify is generated on any inferiors
of the window before being generated on the window itself. The ordering
among siblings and across subhierarchies is not otherwise constrained. If
the window you specified is a root window, no windows are destroyed. Destroying
a mapped window will generate Expose events on other windows that were
obscured by the window being destroyed.

XDestroyWindow can generate a
BadWindow error.

The XDestroySubwindows function destroys all inferior
windows of the specified window, in bottom-to-top stacking order. It causes
the X server to generate a DestroyNotify event for each window. If any
mapped subwindows were actually destroyed, XDestroySubwindows causes
the X server to generate Expose events on the specified window. This
is much more efficient than deleting many windows one at a time because
much of the work need be performed only once for all of the windows, rather
than for each window. The subwindows should never be referenced again.