ui/gtk/text.c

changeset 1114
388285e877fe
parent 1103
4ba6f75d8966
--- a/ui/gtk/text.c	Mon Apr 27 21:43:34 2026 +0200
+++ b/ui/gtk/text.c	Tue Apr 28 16:36:10 2026 +0200
@@ -221,6 +221,7 @@
     GtkWidget *widget = ui_textarea_gettextwidget(textarea);
     if(!widget) {
         fprintf(stderr, "Error: ui_textarea_scroll_to: widget is not a textarea\n");
+        return;
     }
     GtkTextBuffer *buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget));
     
@@ -230,6 +231,81 @@
     gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(widget), &offset, 0.2, FALSE, 0, 0);
 }
 
+void ui_textarea_focus(UIWIDGET textarea) {
+    gtk_widget_grab_focus(textarea);
+}
+
+void ui_textarea_set_selection(UIWIDGET textarea, int begin, int end) {
+    GtkWidget *widget = ui_textarea_gettextwidget(textarea);
+    if(!widget) {
+        fprintf(stderr, "Error: ui_textarea_set_selection: widget is not a textarea\n");
+        return;
+    }
+    
+    GtkTextBuffer *buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget));
+    GtkTextIter ib;
+    GtkTextIter ie;
+    gtk_text_buffer_get_iter_at_offset(buf, &ib, begin);
+    gtk_text_buffer_get_iter_at_offset(buf, &ie, end);
+    gtk_text_buffer_select_range(buf, &ib, &ie);
+}
+
+void ui_textarea_select_all(UIWIDGET textarea) {
+    GtkWidget *widget = ui_textarea_gettextwidget(textarea);
+    if(!widget) {
+        fprintf(stderr, "Error: ui_textarea_select_all: widget is not a textarea\n");
+        return;
+    }
+    GtkTextBuffer *buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget));
+    GtkTextIter start;
+    GtkTextIter end;
+    gtk_text_buffer_get_bounds(buf, &start, &end);
+    gtk_text_buffer_select_range(buf, &start, &end);
+}
+
+void ui_textarea_set_editable(UIWIDGET textarea, UiBool editable) {
+    GtkWidget *widget = ui_textarea_gettextwidget(textarea);
+    if(!widget) {
+        fprintf(stderr, "Error: ui_textarea_set_editable: widget is not a textarea\n");
+        return;
+    }
+    gtk_text_view_set_editable(GTK_TEXT_VIEW(widget), editable);
+}
+
+UiBool ui_textarea_is_editable(UIWIDGET textarea) {
+    GtkWidget *widget = ui_textarea_gettextwidget(textarea);
+    if(!widget) {
+        fprintf(stderr, "Error: ui_textarea_is_editable: widget is not a textarea\n");
+        return 0;
+    }
+    return gtk_text_view_get_editable(GTK_TEXT_VIEW(widget));
+}
+
+void ui_textarea_set_position(UIWIDGET textarea, int pos) {
+    GtkWidget *widget = ui_textarea_gettextwidget(textarea);
+    if(!widget) {
+        fprintf(stderr, "Error: ui_textarea_set_position: widget is not a textarea\n");
+        return;
+    }
+    GtkTextBuffer *buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget));
+    GtkTextIter iter;
+    gtk_text_buffer_get_iter_at_offset(buf, &iter, pos);
+    gtk_text_buffer_place_cursor(buf, &iter);
+}
+
+int ui_textarea_get_position(UIWIDGET textarea) {
+    GtkWidget *widget = ui_textarea_gettextwidget(textarea);
+    if(!widget) {
+        fprintf(stderr, "Error: ui_textarea_get_position: widget is not a textarea\n");
+        return 0;
+    }
+    GtkTextBuffer *buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget));
+    GtkTextIter begin;
+    GtkTextIter end;
+    gtk_text_buffer_get_selection_bounds(buf, &begin, &end);
+    return gtk_text_iter_get_offset(&begin);
+}
+
 UIWIDGET ui_textarea_gettextwidget(UIWIDGET textarea) {
     return g_object_get_data(G_OBJECT(textarea), "ui_textarea_widget");
 }

mercurial