Ich habe es hinbekommen, da war im Web ein Tutorial bei der SDL Seite.
Ich musste nur noch etwas abändern:

Code:
/* wait for event */

    SDL_EnableUNICODE (SDL_ENABLE);
    SDL_StartTextInput ();

    wait = TRUE;

    while (wait)
    {
        if (! SDL_WaitEvent (&event))
        {
            printf ("event_gadget_string: error can't wait for event!\n");
            free (string_buf);
            return FALSE;
        }

        value_len = strlen (string->value);

        switch (event.type)
        {
            case SDL_KEYDOWN:
                key = event.key.keysym.sym;
                switch (key)
                {
                    case SDLK_BACKSPACE:
                        printf ("event_gadget_string: BACKSPACE\n");

                        if (string->insert_pos > 0)
                        {
                            strremoveleft (string_buf, string->value, string->insert_pos);
                            strcpy (string->value, string_buf);

                            string->cursor_pos--;
                            string->insert_pos--;

                            if (! draw_gadget_string (client, screennum, gadget_index, GADGET_SELECTED))
                            {
                                free (string_buf);
                                return (FALSE);
                            }
                        }
                        break;

                    case SDLK_DELETE:
                        printf ("event_gadget_string: DELETE\n");

                        strremoveright (string_buf, string->value, string->insert_pos);
                        strcpy (string->value, string_buf);

                        if (! draw_gadget_string (client, screennum, gadget_index, GADGET_SELECTED))
                        {
                            free (string_buf);
                            return (FALSE);
                        }
                        break;

                        break;

                    case SDLK_LEFT:
                        printf ("event_gadget_string: CURSOR LEFT\n");

                        if (string->cursor_pos > 0)
                        {
                            string->cursor_pos--;
                            string->insert_pos--;

                            if (! draw_gadget_string (client, screennum, gadget_index, GADGET_SELECTED))
                            {
                                free (string_buf);
                                return (FALSE);
                            }
                        }

                        break;

                    case SDLK_RIGHT:
                        printf ("event_gadget_string: CURSOR RIGHT\n");

                        if (string->cursor_pos < value_len)
                        {
                            string->cursor_pos++;
                            string->insert_pos++;

                            if (! draw_gadget_string (client, screennum, gadget_index, GADGET_SELECTED))
                            {
                                free (string_buf);
                                return (FALSE);
                            }
                        }
                        break;

                    case SDLK_RETURN:
                        printf ("event_gadget_string: RETURN\n");
                        wait = FALSE;
                        break;
                }
                break;
                 
            case SDL_TEXTINPUT:
                /* update the composition text */
                        
                printf ("DEBUG: SDL_TEXTINPUT\n");
                        
                i = 0; insert_pos = string->insert_pos;
                           
                while (event.text.text[i] != '\0')
                {
                    if (value_len < string->string_len)
                    {
                        strinsertchar (string_buf, string->value, event.text.text[i], insert_pos);
                        strcpy (string->value, string_buf);
                                
                        i = i + 1;
                        insert_pos = insert_pos + 1;
                        value_len = value_len + 1;
                        
                        string->cursor_pos++;
                        string->insert_pos++;
                    }
                    else
                    {
                        printf ("event_gadget_string: textinput = full\n");
                        wait = FALSE;
                        break;
                    }
                }
                        
                if (! draw_gadget_string (client, screennum, gadget_index, GADGET_SELECTED))
                {
                    free (string_buf);
                    return (FALSE);
                }
                break;
        }
    }

    SDL_StopTextInput();

    free (string_buf);
    return (TRUE);
}