From 8d22f47339df9018c86dce8f71918f9ab8f014cc Mon Sep 17 00:00:00 2001 From: tlatorre Date: Sat, 12 Nov 2022 13:50:22 -0600 Subject: factor out backspace code into a function --- vito.c | 49 +++++++++++++++++-------------------------------- 1 file changed, 17 insertions(+), 32 deletions(-) diff --git a/vito.c b/vito.c index 0e1bf20..de6e166 100644 --- a/vito.c +++ b/vito.c @@ -123,6 +123,21 @@ long released_time_sec = 0; /* Time the mouse was released (milliseconds) */ long released_time_msec = 0; +void backspace(void) +{ + GtkTextBuffer *text_buffer; + GtkTextIter start, end; + + if (current_position > 0) { + text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_widget)); + gtk_text_buffer_set_text(text_buffer, buf, -1); + + gtk_text_buffer_get_iter_at_offset(text_buffer, &start, 0); + gtk_text_buffer_get_iter_at_offset(text_buffer, &end, g_utf8_strlen(buf,-1)-2); + current_position = strlen(gtk_text_buffer_get_slice(text_buffer,&start,&end,TRUE)); + } +} + static int pressed(GtkWidget *widget, gpointer data) { aeGetTime(&pressed_time_sec,&pressed_time_msec); @@ -146,8 +161,6 @@ static void write_buf(void) static int released(GtkWidget *widget, gpointer data) { - GtkTextBuffer *text_buffer; - GtkTextIter start, end; const char *current_char; aeGetTime(&released_time_sec,&released_time_msec); @@ -159,14 +172,7 @@ static int released(GtkWidget *widget, gpointer data) } else if (diff > CLICK_TIME) { current_char = current_chars->characters[current_letter % current_chars->len]; if (!strcmp(current_char,LEFT_ARROW)) { - if (current_position > 0) { - text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_widget)); - gtk_text_buffer_set_text(text_buffer, buf, -1); - - gtk_text_buffer_get_iter_at_offset(text_buffer, &start, 0); - gtk_text_buffer_get_iter_at_offset(text_buffer, &end, g_utf8_strlen(buf,-1)-2); - current_position = strlen(gtk_text_buffer_get_slice(text_buffer,&start,&end,TRUE)); - } + backspace(); } else if (!strcmp(current_char,CLEAR_SCREEN)) { current_position = 0; current_letter = 0; @@ -209,12 +215,9 @@ static int released(GtkWidget *widget, gpointer data) gboolean on_key_press(GtkEventControllerKey *, guint keyval, guint keycode, GdkModifierType mod, gpointer user_data) { - GtkTextBuffer *text_buffer; - GtkTextIter start, end; switch (keyval) { case GDK_KEY_space: - printf("switching alphabet"); if (current_chars == &emoji) current_chars = &alphabet; else if (current_chars == &alphabet) @@ -222,25 +225,7 @@ gboolean on_key_press(GtkEventControllerKey *, guint keyval, guint keycode, GdkM write_buf(); break; case GDK_KEY_BackSpace: - case GDK_KEY_Delete: - if (current_position > 0) { - text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_widget)); - gtk_text_buffer_set_text(text_buffer, buf, -1); - - gtk_text_buffer_get_iter_at_offset(text_buffer, &start, 0); - gtk_text_buffer_get_iter_at_offset(text_buffer, &end, g_utf8_strlen(buf,-1)-2); - current_position = strlen(gtk_text_buffer_get_slice(text_buffer,&start,&end,TRUE)); - } - if (current_position > LEN(buf) - 1) { - /* FIXME: better way to do this? */ - current_position = 0; - } - /* Uncomment the next line to start over at the beginning of the - * alphabet after a new letter is entered. But, I think it's better - * to keep the current letter. The reason is that you might want to - * delete a whole word and so when you navigate to the backspace you - * just have to keep entering the same letter. */ - current_letter = 0; + backspace(); write_buf(); break; default: -- cgit