Fixed crashes after automatic scroll on text buffer windows
[rodin/chimara.git] / libchimara / input.c
index 716431b4a0313d5a61144d5e2580b232157dd17b..8400998f22f057b0bc59fb2ce5bdb0007d279988 100644 (file)
@@ -71,6 +71,8 @@ glk_cancel_char_event(winid_t win)
 static void
 text_grid_request_line_event_common(winid_t win, glui32 maxlen, gboolean insert, gchar *inserttext)
 {
+       gdk_threads_enter();
+       
        GtkTextBuffer *buffer = gtk_text_view_get_buffer( GTK_TEXT_VIEW(win->widget) );
 
     GtkTextMark *cursor = gtk_text_buffer_get_mark(buffer, "cursor_position");
@@ -126,12 +128,16 @@ text_grid_request_line_event_common(winid_t win, glui32 maxlen, gboolean insert,
     gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(win->widget), win->input_entry, win->input_anchor);
        
        g_signal_handler_unblock( G_OBJECT(win->widget), win->keypress_handler );
+       
+       gdk_threads_leave();
 }
     
 /* Internal function: Request either latin-1 or unicode line input, in a text buffer window. */
 static void
 text_buffer_request_line_event_common(winid_t win, glui32 maxlen, gboolean insert, gchar *inserttext)
 {
+       gdk_threads_enter();
+       
        GtkTextBuffer *buffer = gtk_text_view_get_buffer( GTK_TEXT_VIEW(win->widget) );
 
     /* Move the input_position mark to the end of the window_buffer */
@@ -156,6 +162,8 @@ text_buffer_request_line_event_common(winid_t win, glui32 maxlen, gboolean inser
     
     gtk_text_view_set_editable(GTK_TEXT_VIEW(win->widget), TRUE);
     g_signal_handler_unblock(buffer, win->insert_text_handler);
+       
+       gdk_threads_leave();
 }
 
 /**
@@ -275,7 +283,7 @@ glk_request_line_event_uni(winid_t win, glui32 *buf, glui32 maxlen, glui32 initl
  *
  * For convenience, it is legal to call glk_cancel_line_event() even if there
  * is no line input request on that window. The event type will be set to
- * #evtype_None in this case.
+ * %evtype_None in this case.
  */
 void
 glk_cancel_line_event(winid_t win, event_t *event)