X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fdialog-x.c;h=3d1acc356ce915b09f71ab41c0b30b8305fc45e0;hb=1a223d8b9452c8ac5d0d110aa35c0de0a25e3fae;hp=a61eee8e01d6cbfc90fe2224859a25ae7ccb307f;hpb=1c97bf160520f9e0b193236a902eb4b73d59d134;p=chise%2Fxemacs-chise.git- diff --git a/src/dialog-x.c b/src/dialog-x.c index a61eee8..3d1acc3 100644 --- a/src/dialog-x.c +++ b/src/dialog-x.c @@ -44,22 +44,28 @@ maybe_run_dbox_text_callback (LWLIB_ID id) 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 @@ -100,7 +106,7 @@ dbox_selection_callback (Widget widget, LWLIB_ID id, XtPointer client_data) 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" }; @@ -144,7 +150,7 @@ dbox_descriptor_to_widget_value (Lisp_Object desc) 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; @@ -164,9 +170,10 @@ dbox_descriptor_to_widget_value (Lisp_Object desc) 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; } @@ -178,8 +185,9 @@ dbox_descriptor_to_widget_value (Lisp_Object desc) 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++; @@ -202,7 +210,7 @@ dbox_descriptor_to_widget_value (Lisp_Object desc) 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. */