Trying to apply correct styles when recalling history. See #32
[projects/chimara/chimara.git] / libchimara / input.c
index 4036117f48e5c900935bad3683a96c2bd137ae81..95a2aa4a4138c0ab5c57953aa14ed37bd7175809 100644 (file)
@@ -91,6 +91,10 @@ glk_cancel_char_event(winid_t win)
 static void
 text_grid_request_line_event_common(winid_t win, glui32 maxlen, gboolean insert, gchar *inserttext)
 {
+       /* All outstanding printing _must_ be finished before putting an input entry
+        into the buffer */
+       flush_window_buffer(win);
+
        gdk_threads_enter();
 
        GtkTextBuffer *buffer = gtk_text_view_get_buffer( GTK_TEXT_VIEW(win->widget) );
@@ -190,7 +194,9 @@ text_buffer_request_line_event_common(winid_t win, glui32 maxlen, gboolean inser
        /* Apply the correct style to the input prompt */
        GtkTextIter input_iter;
     gtk_text_buffer_get_iter_at_mark(buffer, &input_iter, input_position);
+    gtk_text_buffer_apply_tag_by_name(buffer, "default", &input_iter, &end_iter);
     gtk_text_buffer_apply_tag_by_name(buffer, "input", &input_iter, &end_iter);
+    gtk_text_buffer_apply_tag_by_name(buffer, "glk-input", &input_iter, &end_iter);
 
     gtk_text_view_set_editable(GTK_TEXT_VIEW(win->widget), TRUE);
 
@@ -517,7 +523,8 @@ on_line_input_key_press_event(GtkWidget *widget, GdkEventKey *event, winid_t win
                                gtk_text_buffer_get_end_iter(buffer, &end);
 
                                g_signal_handler_block(buffer, win->insert_text_handler);
-                               gtk_text_buffer_insert_with_tags_by_name(buffer, &end, win->history_pos->data, -1, "default", "input", NULL);
+                               gtk_text_buffer_insert_with_tags_by_name(buffer, &end, win->history_pos->data, -1, "default", "input", "glk-input", NULL);
+
                                g_signal_handler_unblock(buffer, win->insert_text_handler);
                                return TRUE;
                        }
@@ -811,6 +818,11 @@ on_input_entry_key_press_event(GtkEntry *input_entry, GdkEventKey *event, winid_
                g_signal_handler_unblock(input_entry, win->line_input_entry_changed);
                return TRUE;
        }
+       else if(g_slist_find(win->current_extra_line_terminators, GUINT_TO_POINTER(event->keyval)))
+       {
+               /* If this key was a line terminator, pretend we pressed enter */
+               on_input_entry_activate(input_entry, win);
+       }
        return FALSE;
 }
 
@@ -1157,4 +1169,4 @@ glk_set_terminators_line_event(winid_t win, glui32 *keycodes, glui32 count)
                else
                   WARNING_S("Ignoring invalid line terminator", gdk_keyval_name(key));
        }
-}
\ No newline at end of file
+}