+/* recalculate menu position in respect to its parent */
+static void
+recalcmenu(struct Menu *menu)
+{
+ XWindowAttributes parentwin;
+
+ if (menu->parent == NULL)
+ return;
+
+ XGetWindowAttributes(dpy, menu->parent->win, &parentwin);
+
+ if (screengeom.screenw - (parentwin.x + menu->parent->w + geom.border) >= menu->w)
+ menu->x = parentwin.x + menu->parent->w + geom.border;
+ else if (parentwin.x > menu->w + geom.border)
+ menu->x = parentwin.x - menu->w - geom.border;
+
+ if (screengeom.screenh - (menu->caller->y + parentwin.y) > menu->h)
+ menu->y = menu->caller->y + parentwin.y;
+ else if (screengeom.screenh - parentwin.y > menu->h)
+ menu->y = parentwin.y;
+ else if (screengeom.screenh > menu->h)
+ menu->y = screengeom.screenh - menu->h;
+
+ XMoveWindow(dpy, menu->win, menu->x, menu->y);
+}
+