+static Lisp_Object
+copy_gui_item (Lisp_Object gui_item)
+{
+ Lisp_Object ret = allocate_gui_item ();
+ Lisp_Gui_Item *lp, *g = XGUI_ITEM (gui_item);
+
+ lp = XGUI_ITEM (ret);
+ lp->name = g->name;
+ lp->callback = g->callback;
+ lp->callback_ex = g->callback_ex;
+ lp->suffix = g->suffix;
+ lp->active = g->active;
+ lp->included = g->included;
+ lp->config = g->config;
+ lp->filter = g->filter;
+ lp->style = g->style;
+ lp->selected = g->selected;
+ lp->keys = g->keys;
+ lp->accelerator = g->accelerator;
+ lp->value = g->value;
+
+ return ret;
+}
+
+Lisp_Object
+copy_gui_item_tree (Lisp_Object arg)
+{
+ if (CONSP (arg))
+ {
+ Lisp_Object rest = arg = Fcopy_sequence (arg);
+ while (CONSP (rest))
+ {
+ XCAR (rest) = copy_gui_item_tree (XCAR (rest));
+ rest = XCDR (rest);
+ }
+ return arg;
+ }
+ else if (GUI_ITEMP (arg))
+ return copy_gui_item (arg);
+ else
+ return arg;
+}
+