widget_value *wv;
int got_some;
wv = xmalloc_widget_value ();
- wv->name = (char *) "value";
+ wv->name = xstrdup ("value");
got_some = lw_get_some_values (id, wv);
if (got_some)
{
Lisp_Object text_field_callback;
char *text_field_value = wv->value;
VOID_TO_LISP (text_field_callback, wv->call_data);
+ text_field_callback = XCAR (XCDR (text_field_callback));
if (text_field_value)
{
- void *tmp = LISP_TO_VOID (list2 (text_field_callback,
- build_string (text_field_value)));
+ void *tmp =
+ LISP_TO_VOID (cons3 (Qnil,
+ list2 (text_field_callback,
+ build_string (text_field_value)),
+ Qnil));
popup_selection_callback (0, id, (XtPointer) tmp);
- xfree (text_field_value);
}
}
- free_widget_value (wv);
+ /* This code tried to optimize, newing/freeing. This is generally
+ unsafe so we will alwats strdup and always use
+ free_widget_value_tree. */
+ free_widget_value_tree (wv);
}
static void
lw_set_keyboard_focus (FRAME_X_SHELL_WIDGET (f), FRAME_X_TEXT_WIDGET (f));
}
-static CONST char * CONST button_names [] = {
+static const char * const button_names [] = {
"button1", "button2", "button3", "button4", "button5",
"button6", "button7", "button8", "button9", "button10" };
wv_closure = make_opaque_ptr (kids);
record_unwind_protect (widget_value_unwind, wv_closure);
- prev->name = (char *) "message";
+ prev->name = xstrdup ("message");
prev->value = xstrdup (name);
prev->enabled = 1;
wv = xmalloc_widget_value ();
gui_item = gui_parse_item_keywords (button);
- if (!button_item_to_widget_value (gui_item, wv, allow_text_p, 1))
+ if (!button_item_to_widget_value (Qdialog,
+ gui_item, wv, allow_text_p, 1, 0))
{
- free_widget_value (wv);
+ free_widget_value_tree (wv);
continue;
}
else /* it's a button */
{
allow_text_p = 0; /* only allow text field at the front */
- wv->value = xstrdup (wv->name); /* what a mess... */
- wv->name = (char *) button_names [n];
+ if (wv->value) xfree (wv->value);
+ wv->value = wv->name; /* what a mess... */
+ wv->name = xstrdup (button_names [n]);
if (partition_seen)
rbuttons++;
widget_value *dbox;
sprintf (tmp_dbox_name, "%c%dBR%d", type, lbuttons + rbuttons, rbuttons);
dbox = xmalloc_widget_value ();
- dbox->name = tmp_dbox_name;
+ dbox->name = xstrdup (tmp_dbox_name);
dbox->contents = kids;
/* No more need to free the half-filled-in structures. */