Eliminated warnings about static functions declared with G_GNUC_INTERNAL
[projects/chimara/chimara.git] / src / input.c
index 418e5ea1f6b2e82b6a662e40887054c146a3d345..18a7ecbcb124aae33295ebde4ca27314bc8e0f44 100644 (file)
@@ -2,6 +2,10 @@
 #include "magic.h"
 #include "input.h"
 
+/* Forward declarations */
+static int flush_text_buffer(winid_t win);
+static int flush_text_grid(winid_t win);
+
 /** 
  * glk_request_char_event:
  * @win: A window to request char events from.
@@ -276,15 +280,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 +306,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 +457,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);