X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;ds=sidebyside;f=libchimara%2Finput.c;h=ab1eef52de587023d18f79cd14ec81fa5abcfb06;hb=030e31fda2fd37c7cd4237bc325c82cac9d31689;hp=acd0ae1e4de4d9e89a565ee4364d579b0109b57e;hpb=bae31a7df18ecafe05ec1a11b0961708bc3badd6;p=projects%2Fchimara%2Fchimara.git diff --git a/libchimara/input.c b/libchimara/input.c index acd0ae1..ab1eef5 100644 --- a/libchimara/input.c +++ b/libchimara/input.c @@ -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(); } /** @@ -392,7 +400,7 @@ on_window_key_press_event(GtkWidget *widget, GdkEventKey *event, winid_t win) keycode = keycode_Unknown; } - event_throw(evtype_CharInput, win, keycode, 0); + event_throw(CHIMARA_GLK(gtk_widget_get_ancestor(widget, CHIMARA_TYPE_GLK)), evtype_CharInput, win, keycode, 0); /* Only one keypress will be handled */ win->input_request_type = INPUT_REQUEST_NONE; @@ -534,7 +542,7 @@ after_window_insert_text(GtkTextBuffer *textbuffer, GtkTextIter *location, gchar gtk_text_view_set_editable(GTK_TEXT_VIEW(win->widget), FALSE); int chars_written = flush_text_buffer(win); - event_throw(evtype_LineInput, win, chars_written, 0); + event_throw(CHIMARA_GLK(gtk_widget_get_ancestor(win->widget, CHIMARA_TYPE_GLK)), evtype_LineInput, win, chars_written, 0); } } @@ -546,6 +554,6 @@ on_input_entry_activate(GtkEntry *input_entry, winid_t win) g_signal_handler_block( G_OBJECT(win->widget), win->keypress_handler ); int chars_written = flush_text_grid(win); - event_throw(evtype_LineInput, win, chars_written, 0); + event_throw(CHIMARA_GLK(gtk_widget_get_ancestor(GTK_WIDGET(input_entry), CHIMARA_TYPE_GLK)), evtype_LineInput, win, chars_written, 0); }