Implemented output buffering.
[rodin/chimara.git] / libchimara / input.c
index 4aca9d965f8dda0daba77e553d71779777c2127f..f48aa848fbc3ccda941dcac94e14d1e2474ae6be 100644 (file)
@@ -17,6 +17,10 @@ request_char_event_common(winid_t win, gboolean unicode)
        g_return_if_fail(win->input_request_type == INPUT_REQUEST_NONE);
        g_return_if_fail(win->type != wintype_TextBuffer || win->type != wintype_TextGrid);
 
+       flush_window_buffer(win);
+       
+       ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
+
        win->input_request_type = unicode? INPUT_REQUEST_CHARACTER_UNICODE : INPUT_REQUEST_CHARACTER;
        g_signal_handler_unblock( G_OBJECT(win->widget), win->keypress_handler );
 
@@ -37,6 +41,9 @@ request_char_event_common(winid_t win, gboolean unicode)
        
        gtk_widget_grab_focus( GTK_WIDGET(win->widget) );
        gdk_threads_leave();
+       
+       /* Emit the "waiting" signal to let listeners know we are ready for input */
+       g_signal_emit_by_name(glk_data->self, "waiting");
 }
 
 /** 
@@ -161,6 +168,8 @@ text_grid_request_line_event_common(winid_t win, glui32 maxlen, gboolean insert,
 static void
 text_buffer_request_line_event_common(winid_t win, glui32 maxlen, gboolean insert, gchar *inserttext)
 {
+       flush_window_buffer(win);
+
        gdk_threads_enter();
        
        GtkTextBuffer *buffer = gtk_text_view_get_buffer( GTK_TEXT_VIEW(win->widget) );
@@ -248,6 +257,9 @@ glk_request_line_event(winid_t win, char *buf, glui32 maxlen, glui32 initlen)
                break;
     }
        g_free(inserttext);
+       
+       /* Emit the "waiting" signal to let listeners know we are ready for input */
+       g_signal_emit_by_name(glk_data->self, "waiting");
 }
 
 /**
@@ -306,6 +318,9 @@ glk_request_line_event_uni(winid_t win, glui32 *buf, glui32 maxlen, glui32 initl
                break;
     }          
        g_free(utf8);
+       
+       /* Emit the "waiting" signal to let listeners know we are ready for input */
+       g_signal_emit_by_name(glk_data->self, "waiting");
 }
 
 /**