}
else
{
- wv->name = string_chars;
+ wv->name = xstrdup (string_chars);
wv->enabled = 1;
+ /* dverna Dec. 98: command_builder_operate_menu_accelerator will
+ manipulate the accel as a Lisp_Object if the widget has a name.
+ Since simple labels have a name, but no accel, we *must* set it
+ to nil */
+ wv->accel = LISP_TO_VOID (Qnil);
}
}
else if (VECTORP (desc))
{
- if (!button_item_to_widget_value (desc, wv, 1,
+ Lisp_Object gui_item = gui_parse_item_keywords (desc);
+ if (!button_item_to_widget_value (gui_item, wv, 1,
(menu_type == MENUBAR_TYPE
&& depth <= 1)))
{
wv->type = CASCADE_TYPE;
wv->enabled = 1;
wv->name = (char *) XSTRING_DATA (LISP_GETTEXT (XCAR (desc)));
+ wv->name = xstrdup (wv->name);
- accel = menu_name_to_accelerator (wv->name);
+ accel = gui_name_accelerator (LISP_GETTEXT (XCAR (desc)));
wv->accel = LISP_TO_VOID (accel);
desc = Fcdr (desc);
incr_wv->type = INCREMENTAL_TYPE;
incr_wv->enabled = 1;
incr_wv->name = wv->name;
+ incr_wv->name = xstrdup (wv->name);
/* This is automatically GC protected through
the call to lw_map_widget_values(); no need
to worry. */
widget_value *title_wv = xmalloc_widget_value ();
widget_value *sep_wv = xmalloc_widget_value ();
title_wv->type = TEXT_TYPE;
- title_wv->name = wv->name;
+ title_wv->name = xstrdup (wv->name);
title_wv->enabled = 1;
title_wv->next = sep_wv;
sep_wv->type = SEPARATOR_TYPE;
widget_value *dummy;
/* Add a fake entry so the menus show up */
wv->contents = dummy = xmalloc_widget_value ();
- dummy->name = "(inactive)";
+ dummy->name = xstrdup ("(inactive)");
dummy->accel = LISP_TO_VOID (Qnil);
dummy->enabled = 0;
dummy->selected = 0;
}
else if (menubar_root_p)
{
- wv->name = (char *) "menubar";
+ wv->name = xstrdup ("menubar");
wv->type = CASCADE_TYPE; /* Well, nothing else seems to fit and
this is ignored anyway... */
}
wv = xmalloc_widget_value ();
wv->type = CASCADE_TYPE;
wv->next = NULL;
+ wv->accel = LISP_TO_VOID (Qnil);
wv->contents = xmalloc_widget_value ();
wv->contents->type = TEXT_TYPE;
- wv->contents->name = (char *) "No menu";
+ wv->contents->name = xstrdup ("No menu");
wv->contents->next = NULL;
+ wv->contents->accel = LISP_TO_VOID (Qnil);
}
assert (wv && wv->type == CASCADE_TYPE && wv->contents);
replace_widget_value_tree (hack_wv, wv->contents);
if (NILP (FRAME_MENUBAR_DATA (f)))
{
struct popup_data *mdata =
- alloc_lcrecord_type (struct popup_data, lrecord_popup_data);
+ alloc_lcrecord_type (struct popup_data, &lrecord_popup_data);
mdata->id = new_lwlib_id ();
mdata->last_menubar_buffer = Qnil;
if (eev)
{
Position shellx, shelly, framex, framey;
- Widget shell = XtParent (daddy);
Arg al [2];
btn->time = eev->timestamp;
btn->button = eev->event.button.button;
btn->subwindow = (Window) NULL;
btn->x = eev->event.button.x;
btn->y = eev->event.button.y;
- XtSetArg (al [0], XtNx, &shellx);
- XtSetArg (al [1], XtNy, &shelly);
- XtGetValues (shell, al, 2);
+ shellx = shelly = 0;
+#ifndef HAVE_WMCOMMAND
+ {
+ Widget shell = XtParent (daddy);
+
+ XtSetArg (al [0], XtNx, &shellx);
+ XtSetArg (al [1], XtNy, &shelly);
+ XtGetValues (shell, al, 2);
+ }
+#endif
XtSetArg (al [0], XtNx, &framex);
XtSetArg (al [1], XtNy, &framey);
XtGetValues (daddy, al, 2);
}
void
-vars_of_menubar_x (void)
+reinit_vars_of_menubar_x (void)
{
last_popup_menu_selection_callback_id = (LWLIB_ID) -1;
+}
+
+void
+vars_of_menubar_x (void)
+{
+ reinit_vars_of_menubar_x ();
#if defined (LWLIB_MENUBARS_LUCID)
Fprovide (intern ("lucid-menubars"));