Lisp_Object fn, arg;
Lisp_Object data;
Lisp_Object frame;
+ int update_subwindows_p = 0;
struct device *d = get_device_from_display (XtDisplay (widget));
struct frame *f = x_any_widget_or_parent_to_frame (d, widget);
}
else
{
- MARK_SUBWINDOWS_STATE_CHANGED;
+ update_subwindows_p = 1;
get_gui_callback (data, &fn, &arg);
}
DEVICE_X_MOUSE_TIMESTAMP (d) = DEVICE_X_GLOBAL_MOUSE_TIMESTAMP (d);
#endif
signal_special_Xt_user_event (frame, fn, arg);
+ /* The result of this evaluation could cause other instances to change so
+ enqueue an update callback to check this. */
+ if (update_subwindows_p)
+ signal_special_Xt_user_event (frame, Qeval,
+ list2 (Qupdate_widget_instances, frame));
}
#if 1
return NULL;
}
+char *
+strdup_and_add_accel (char *name)
+{
+ int i;
+ int found_accel = 0;
+
+ for (i=0; name[i]; ++i)
+ if (name[i] == '%' && name[i+1] == '_')
+ {
+ found_accel = 1;
+ break;
+ }
+
+ if (found_accel)
+ return xstrdup (name);
+ else
+ {
+ char *chars = (char *) alloca (strlen (name) + 3);
+ chars[0] = '%';
+ chars[1] = '_';
+ memcpy (chars+2, name, strlen (name) + 1);
+ return xstrdup (chars);
+ }
+}
/* This does the dirty work. gc_currently_forbidden is 1 when this is called.
*/
{
wv->type = TEXT_TYPE;
wv->name = (char *) XSTRING_DATA (gui_item);
- wv->name = xstrdup (wv->name);
+ wv->name = strdup_and_add_accel (wv->name);
return 1;
}
else if (!GUI_ITEMP (gui_item))
}
#endif /* HAVE_MENUBARS */
+ if (!STRINGP (pgui->name))
+ pgui->name = Feval (pgui->name);
+
CHECK_STRING (pgui->name);
wv->name = (char *) XSTRING_DATA (pgui->name);
wv->name = xstrdup (wv->name);
}
else if (SYMBOLP (pgui->callback)) /* Show the binding of this command. */
{
- char buf [1024];
+ char buf[1024]; /* #### */
/* #### Warning, dependency here on current_buffer and point */
where_is_to_char (pgui->callback, buf);
if (buf [0])