X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=src%2Finput.c;h=c9775fc77623465c2172ff31b1347aa724375dad;hb=062bbb9e7322c8e3f5162f86fc2f93bfc587b830;hp=7eebfa596ac2e85324cb8c2917ec80d15dded6e5;hpb=e47eebee2f127d0c1d4825d9bdc41471b6d7f3c1;p=rodin%2Fchimara.git diff --git a/src/input.c b/src/input.c index 7eebfa5..c9775fc 100644 --- a/src/input.c +++ b/src/input.c @@ -1,6 +1,8 @@ +#include "charset.h" #include "input.h" -/** glk_request_char_event: +/** + * glk_request_char_event: * @win: A window to request char events from. * * Request input of a Latin-1 character or special key. A window cannot have @@ -20,7 +22,8 @@ glk_request_char_event(winid_t win) g_signal_handler_unblock( G_OBJECT(win->widget), win->keypress_handler ); } -/** glk_request_char_event_uni: +/** + * glk_request_char_event_uni: * @win: A window to request char events from. * * Request input of a Unicode character or special key. See @@ -203,14 +206,9 @@ glk_request_line_event_uni(winid_t win, glui32 *buf, glui32 maxlen, glui32 initl gchar *utf8; if(initlen > 0) { - GError *error = NULL; - utf8 = g_ucs4_to_utf8(buf, initlen, NULL, NULL, &error); - + utf8 = convert_ucs4_to_utf8(buf, initlen); if(utf8 == NULL) - { - g_warning("Error during unicode->utf8 conversion: %s", error->message); return; - } } else utf8 = g_strdup(""); @@ -325,14 +323,11 @@ end_line_input_request(winid_t win, const gchar *inserted_text) /* Convert the string from UTF-8 to Latin-1 or Unicode */ if(win->input_request_type == INPUT_REQUEST_LINE) { - GError *error = NULL; - gchar *latin1; gsize bytes_written; - latin1 = g_convert_with_fallback(inserted_text, -1, "ISO-8859-1", "UTF-8", "?", NULL, &bytes_written, &error); + gchar *latin1 = convert_utf8_to_latin1(inserted_text, &bytes_written); if(latin1 == NULL) { - g_warning("Error during utf8->latin1 conversion: %s", error->message); event_throw(evtype_LineInput, win, 0, 0); return; } @@ -349,21 +344,18 @@ end_line_input_request(winid_t win, const gchar *inserted_text) } else if(win->input_request_type == INPUT_REQUEST_LINE_UNICODE) { - gunichar *unicode; glong items_written; - unicode = g_utf8_to_ucs4_fast(inserted_text, -1, &items_written); + gunichar *unicode = convert_utf8_to_ucs4(inserted_text, &items_written); if(unicode == NULL) { - g_warning("Error during utf8->unicode conversion"); event_throw(evtype_LineInput, win, 0, 0); return; } /* Place input in the echo stream */ - /* TODO: glk_put_string_stream_uni not implemented yet if(win->echo_stream != NULL) - glk_put_string_stream_uni(window->echo_stream, unicode);*/ + glk_put_string_stream_uni(win->echo_stream, unicode); /* Copy the string (but not the NULL at the end) */ int copycount = MIN(win->line_input_buffer_max_len, items_written); @@ -441,3 +433,4 @@ on_input_entry_activate(GtkEntry *input_entry, winid_t win) end_line_input_request(win, text); g_free(text); } +