# HG changeset patch # User Olaf Wintermann # Date 1777661433 -7200 # Node ID 546a969ad7d56ebecec3f1e808c73f76391f9a4f # Parent a8410327b0dcbfc8930117f1bfda7d912405b347# Parent 677f7f68f5aa5accf6edc8fa425d18083ba5ad9e merge diff -r a8410327b0dc -r 546a969ad7d5 resource/.DS_Store Binary file resource/.DS_Store has changed diff -r a8410327b0dc -r 546a969ad7d5 ui/cocoa/text.m --- a/ui/cocoa/text.m Fri May 01 20:49:35 2026 +0200 +++ b/ui/cocoa/text.m Fri May 01 20:50:33 2026 +0200 @@ -81,7 +81,91 @@ return (__bridge void*)textview; } +void ui_textarea_focus(UIWIDGET textarea) { + textarea = ui_textarea_gettextwidget(textarea); + if(!textarea) { + fprintf(stderr, "Error: ui_textarea_focus: widget is not a textarea\n"); + return; + } + NSTextView *view = (__bridge NSTextView*)textarea; + [view.window makeFirstResponder:view]; +} + +void ui_textarea_set_selection(UIWIDGET textarea, int begin, int end) { + textarea = ui_textarea_gettextwidget(textarea); + if(!textarea) { + fprintf(stderr, "Error: ui_textarea_set_selection: widget is not a textarea\n"); + return; + } + NSTextView *view = (__bridge NSTextView*)textarea; + NSRange range = NSMakeRange(begin, end-begin); + [view setSelectedRange:range]; +} + +void ui_textarea_select_all(UIWIDGET textarea) { + textarea = ui_textarea_gettextwidget(textarea); + if(!textarea) { + fprintf(stderr, "Error: ui_textarea_select_all: widget is not a textarea\n"); + return; + } +} + +void ui_textarea_set_editable(UIWIDGET textarea, UiBool editable) { + textarea = ui_textarea_gettextwidget(textarea); + if(!textarea) { + fprintf(stderr, "Error: ui_textarea_set_editable: widget is not a textarea\n"); + return; + } + NSTextView *view = (__bridge NSTextView*)textarea; + view.editable = editable; +} + +UiBool ui_textarea_is_editable(UIWIDGET textarea) { + textarea = ui_textarea_gettextwidget(textarea); + if(!textarea) { + fprintf(stderr, "Error: ui_textarea_is_editable: widget is not a textarea\n"); + return 0; + } + NSTextView *view = (__bridge NSTextView*)textarea; + return view.isEditable; +} + +void ui_textarea_set_position(UIWIDGET textarea, int pos) { + textarea = ui_textarea_gettextwidget(textarea); + if(!textarea) { + fprintf(stderr, "Error: ui_textarea_set_position: widget is not a textarea\n"); + return; + } + NSTextView *view = (__bridge NSTextView*)textarea; + NSRange range = NSMakeRange(pos, 0); + [view setSelectedRange:range]; +} + +int ui_textarea_get_position(UIWIDGET textarea) { + textarea = ui_textarea_gettextwidget(textarea); + if(!textarea) { + fprintf(stderr, "Error: ui_textarea_get_position: widget is not a textarea\n"); + return 0; + } + NSTextView *view = (__bridge NSTextView*)textarea; + NSRange range = view.selectedRange; + return (int)range.location; +} + +void ui_textarea_scroll_to(UIWIDGET textarea, int pos) { + textarea = ui_textarea_gettextwidget(textarea); + if(!textarea) { + fprintf(stderr, "Error: ui_textarea_scroll_to: widget is not a textarea\n"); + return; + } + NSTextView *view = (__bridge NSTextView*)textarea; + NSRange range = NSMakeRange(pos, 0); + [view scrollRangeToVisible:range]; +} + + +// UiText textarea functions void ui_textarea_save(UiText *text) { diff -r a8410327b0dc -r 546a969ad7d5 ui/common/types.c --- a/ui/common/types.c Fri May 01 20:49:35 2026 +0200 +++ b/ui/common/types.c Fri May 01 20:50:33 2026 +0200 @@ -978,7 +978,7 @@ char* ui_text_getsubstr(UiText *text, int begin, int end) { if(text->getsubstr) { - text->getsubstr(text, begin, end); + return text->getsubstr(text, begin, end); } else { return NULL; }