X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=src%2Finput.c;h=81b1664cfc161b530175821f9c0ecaf0b9e3f90d;hb=01a1cad6cfa515cef48436f26dcfa5c67238187b;hp=418e5ea1f6b2e82b6a662e40887054c146a3d345;hpb=b45c3ca495891faad9cc7e4ed59bd3991ea37502;p=rodin%2Fchimara.git diff --git a/src/input.c b/src/input.c index 418e5ea..81b1664 100644 --- a/src/input.c +++ b/src/input.c @@ -276,15 +276,18 @@ glk_request_line_event_uni(winid_t win, glui32 *buf, glui32 maxlen, glui32 initl void glk_cancel_line_event(winid_t win, event_t *event) { - /* TODO: write me */ VALID_WINDOW(win, return); - g_return_if_fail(win->input_request_type != INPUT_REQUEST_NONE); g_return_if_fail(win->type != wintype_TextBuffer || win->type != wintype_TextGrid); - event->type = evtype_None; - event->win = win; - event->val1 = 0; - event->val2 = 0; + if(event != NULL) { + event->type = evtype_None; + event->win = win; + event->val1 = 0; + event->val2 = 0; + } + + if(win->input_request_type == INPUT_REQUEST_NONE) + return; g_signal_handler_block( G_OBJECT(win->widget), win->keypress_handler ); @@ -299,7 +302,7 @@ glk_cancel_line_event(winid_t win, event_t *event) chars_written = flush_text_buffer(win); } - if(chars_written > 0) { + if(event != NULL && chars_written > 0) { event->type = evtype_LineInput; event->val1 = chars_written; } @@ -450,15 +453,22 @@ flush_text_buffer(winid_t win) VALID_WINDOW(win, return 0); g_return_val_if_fail(win->type == wintype_TextBuffer, 0); - GtkTextIter start_iter, end_iter; + GtkTextIter start_iter, end_iter, last_character; GtkTextBuffer *window_buffer = gtk_text_view_get_buffer( GTK_TEXT_VIEW(win->widget) ); GtkTextMark *input_position = gtk_text_buffer_get_mark(window_buffer, "input_position"); gtk_text_buffer_get_iter_at_mark(window_buffer, &start_iter, input_position); gtk_text_buffer_get_end_iter(window_buffer, &end_iter); - gtk_text_iter_backward_cursor_position(&end_iter); /* don't include \n */ - + gtk_text_buffer_get_end_iter(window_buffer, &last_character); + gtk_text_iter_backward_cursor_position(&last_character); + + gchar* last_char = gtk_text_buffer_get_text(window_buffer, &last_character, &end_iter, FALSE); + + if( strchr(last_char, '\n') != NULL ) + gtk_text_iter_backward_cursor_position(&end_iter); + gchar* inserted_text = gtk_text_buffer_get_text(window_buffer, &start_iter, &end_iter, FALSE); + int chars_written = write_to_window_buffer(win, inserted_text); g_free(inserted_text);