X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=src%2Finput.c;h=c5134192dfeb974489fc034e96be9ecea9aaf264;hb=2e7aa380dbd9660314df829820d3a7bf73b7d4d0;hp=bda5b4f724317b2ddd4381498ad30a5330ebbf74;hpb=2407b8e96d1a772f15eedb264117f20196fe1c51;p=rodin%2Fchimara.git diff --git a/src/input.c b/src/input.c index bda5b4f..c513419 100644 --- a/src/input.c +++ b/src/input.c @@ -42,7 +42,7 @@ glk_request_char_event_uni(winid_t win) } /* Internal function: Request either latin-1 or unicode line input, in a text grid window. */ -void +static void text_grid_request_line_event_common(winid_t win, glui32 maxlen, gboolean insert, gchar *inserttext) { GtkTextBuffer *buffer = gtk_text_view_get_buffer( GTK_TEXT_VIEW(win->widget) ); @@ -60,6 +60,17 @@ text_grid_request_line_event_common(winid_t win, glui32 maxlen, gboolean insert, end_iter = start_iter; gtk_text_iter_set_line_offset(&end_iter, cursorpos + win->input_length); + /* If the buffer currently has a selection with one bound in the middle of + the input field, then deselect it. Otherwise the input field gets trashed */ + GtkTextIter start_sel, end_sel; + if( gtk_text_buffer_get_selection_bounds(buffer, &start_sel, &end_sel) ) + { + if( gtk_text_iter_in_range(&start_sel, &start_iter, &end_iter) ) + gtk_text_buffer_place_cursor(buffer, &end_sel); + if( gtk_text_iter_in_range(&end_sel, &start_iter, &end_iter) ) + gtk_text_buffer_place_cursor(buffer, &start_sel); + } + /* Erase the text currently in the input field and replace it with a GtkEntry */ gtk_text_buffer_delete(buffer, &start_iter, &end_iter); win->input_anchor = gtk_text_buffer_create_child_anchor(buffer, &start_iter); @@ -92,7 +103,7 @@ text_grid_request_line_event_common(winid_t win, glui32 maxlen, gboolean insert, } /* Internal function: Request either latin-1 or unicode line input, in a text buffer window. */ -void +static void text_buffer_request_line_event_common(winid_t win, glui32 maxlen, gboolean insert, gchar *inserttext) { GtkTextBuffer *buffer = gtk_text_view_get_buffer( GTK_TEXT_VIEW(win->widget) );