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 );
chars_written = flush_text_buffer(win);
}
- if(chars_written > 0) {
+ if(event != NULL && chars_written > 0) {
event->type = evtype_LineInput;
event->val1 = chars_written;
}
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);