+ XtManageChild(w);
+ }
+}
+
+static void menu_cb(Widget w, void *data, void *cb_data)
+{
+ XmRowColumnCallbackStruct *cbs = cb_data;
+ XtCallActionProc(cbs->widget, XtName(cbs->widget), cbs->event, NULL, 0);
+}
+
+static Widget create_pulldown(Widget parent)
+{
+ Widget w;
+
+ w = XmCreatePulldownMenu(parent, XtName(parent), NULL, 0);
+ XtVaSetValues(parent, XmNsubMenuId, w, (char *)NULL);
+ XtAddCallback(w, XmNentryCallback, menu_cb, NULL);
+
+ return w;
+}
+
+static void
+construct_menu(const struct ui_menuitem *root, Widget parent, unsigned i)
+{
+ const struct ui_menuitem *item;
+
+ for (item = &root[i]; item->w.name; item++) {
+ const char *label = &strtab[item->label];
+ unsigned n = 0;
+ Arg args[2];
+ XmString s;
+ Widget w;
+
+ if (XtClass(parent) == *widgets[widgetCascadeButton])
+ parent = create_pulldown(parent);
+
+ if (label[0] && label[1] == '|') {
+ XtSetArg(args[n], XmNmnemonic, label[0]); n++;
+ label += 2;