+
+void action_searchbar_close(UiEvent *event, void *userdata) {
+ ui_unset_state(event->obj->ctx, APP_STATE_NOTE_FIND);
+ ui_unset_state(event->obj->ctx, APP_STATE_NOTE_REPLACE);
+}
+
+void ui_searchbar_next(UiEvent *event, void *userdata) {
+ NoteModel *note = notemodel_current(event->obj);
+ if(!note) {
+ return;
+ }
+
+ char *searchstr = ui_get(note->search);
+ if(!searchstr || strlen(searchstr) == 0) {
+ return;
+ }
+
+ cxstring text = cx_str(ui_get(note->text));
+ int pos = note->text->position(note->text);
+ cxstring subtext = cx_strsubs(text, pos);
+
+ cxstring result = cx_strstr(subtext, searchstr);
+ if(result.ptr) {
+ size_t result_pos = result.ptr - text.ptr;
+ note->text->setselection(note->text, (int)result_pos, (int)(result_pos + result.length));
+ }
+}