code: func (w *Window) DecorGeometry() (xrect.Rect, error) {
  	parent := w
  	for {
  		tempParent, err := parent.Parent()
  		if err != nil || tempParent.Id == w.X.RootWin() {
  			break
  		}
  		parent = tempParent
  	}
  	return RawGeometry(w.X, xproto.Drawable(parent.Id))
  }
docs: // DecorGeometry retrieves the client's width and height including decorations.
  // This can be tricky. In a non-parenting window manager, the width/height of
  // a client can be found by inspecting the client directly. In a reparenting
  // window manager like Openbox, the parent of the client reflects the true
  // width/height. Still yet, in KWin, it's the parent of the parent of the
  // client that reflects the true width/height.
  // The idea then is to traverse up the tree until we hit the root window.
  // Therefore, we're at a top-level window which should accurately reflect
  // the width/height.