static int next_free_gadget_id = 1;
static boolean gadget_id_wrapped = FALSE;
+static void (*PlayGadgetSoundActivating)(void) = NULL;
+static void (*PlayGadgetSoundSelecting)(void) = NULL;
+
+
+void InitGadgetsSoundCallback(void (*activating_function)(void),
+ void (*selecting_function)(void))
+{
+ PlayGadgetSoundActivating = activating_function;
+ PlayGadgetSoundSelecting = selecting_function;
+}
+
static struct GadgetInfo *getGadgetInfoFromGadgetID(int id)
{
struct GadgetInfo *gi = gadget_list_first_entry;
case GDI_INFO_TEXT:
{
- int max_textsize = MAX_INFO_TEXTSIZE - 1;
+ int max_textsize = MAX_INFO_TEXTSIZE;
char *text = va_arg(ap, char *);
if (text != NULL)
int max_textsize = MAX_GADGET_TEXTSIZE;
if (gi->textinput.size)
- max_textsize = MIN(gi->textinput.size, MAX_GADGET_TEXTSIZE - 1);
+ max_textsize = MIN(gi->textinput.size, MAX_GADGET_TEXTSIZE);
strncpy(gi->textinput.value, va_arg(ap, char *), max_textsize);
strcpy(gi->textinput.last_value, gi->textinput.value);
case GDI_TEXT_SIZE:
{
int tag_value = va_arg(ap, int);
- int max_textsize = MIN(tag_value, MAX_GADGET_TEXTSIZE - 1);
+ int max_textsize = MIN(tag_value, MAX_GADGET_TEXTSIZE);
gi->textinput.size = max_textsize;
gi->textinput.value[max_textsize] = '\0';
if (gadget_pressed)
{
+ PlayGadgetSoundActivating();
+
if (gi->type == GD_TYPE_CHECK_BUTTON)
{
gi->checked = !gi->checked;
static void insertCharIntoTextArea(struct GadgetInfo *gi, char c)
{
- char text[MAX_GADGET_TEXTSIZE];
+ char text[MAX_GADGET_TEXTSIZE + 1];
int cursor_position = gi->textarea.cursor_position;
- if (strlen(gi->textarea.value) == MAX_GADGET_TEXTSIZE) /* no space left */
+ if (strlen(gi->textarea.value) >= MAX_GADGET_TEXTSIZE) /* no space left */
return;
strcpy(text, gi->textarea.value);
}
else if (gi->type & GD_TYPE_TEXT_INPUT) /* only valid for text input */
{
- char text[MAX_GADGET_TEXTSIZE];
+ char text[MAX_GADGET_TEXTSIZE + 1];
int text_length = strlen(gi->textinput.value);
int cursor_pos = gi->textinput.cursor_position;
char letter = getCharFromKey(key);
}
else if (gi->type & GD_TYPE_TEXT_AREA) /* only valid for text area */
{
- char text[MAX_GADGET_TEXTSIZE];
+ char text[MAX_GADGET_TEXTSIZE + 1];
int text_length = strlen(gi->textarea.value);
int area_ysize = gi->textarea.ysize;
int cursor_x_pref = gi->textarea.cursor_x_preferred;