Languages

Menu
Sites
Language
App crashes upon entering numbers in entry text. limitation of elm_object_part_text_get() ?

Hi all. I'm trying to create a Gear S3 application that will allow user input and write the user input to a text file. I am using Tizen Native Application, and I am modifying the UIComponents sample project for Tizen Wearable V2.3.2. The user is able to click on the Entry button, which takes them to a second screen that has a list of entries. Clicking on an entry takes you a third screen in which you can input text. I am using elm_object_part_text_get(entry, "elm.text") to get the user's input and write it to a file.

I am running into a problem where the application crashes on a few different occasions:

  • when I enter a number or a special character in the entry text.
  • when I enter more than 3 text characters.
  • sometimes as soon as I enter the 3rd text character, the file gets written with the three characters and then crashes.

Ideally I would like the user to only enter numbers and not be restricted by only being able to enter 3 characters. Any help you have would be great.

static char* write_file(const char* filepath, const char* buf)
{   
    FILE *fp;
    fp = fopen(filepath,"w+");
    fputs(buf,fp);
    fclose(fp);
}

static void _text_changed(void *data, Evas_Object *obj, void *event_info)
{
    Evas_Object *entry = obj;
    const char* const x= elm_object_part_text_get(entry, "elm.text");
    char *datapath = app_get_data_path();
    char *filepath = strcat(datapath, "/testfile.txt");
    write_file(filepath, x);
}

static void _text_entry_cb(void *data, Evas_Object *obj, void *event_info)
{
    Evas_Object *entry;
    Evas_Object *layout;
    Evas_Object *scroller;
    Evas_Object *nf = (Evas_Object *)data;
    static Elm_Entry_Filter_Limit_Size limit_filter_data;

    scroller = elm_scroller_add(nf);
    evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
    evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);

    layout = elm_layout_add(scroller);
    elm_layout_file_set(layout, ELM_DEMO_EDJ, "entry_layout");
    evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, 0.0);
    evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, 0.0);

    entry = elm_entry_add(layout);
    elm_entry_single_line_set(entry, EINA_FALSE);
    elm_entry_line_wrap_set(entry, ELM_WRAP_WORD);
    elm_entry_scrollable_set(entry, EINA_TRUE);
    //elm_entry_file_set(entry, filepath, ELM_TEXT_FORMAT_PLAIN_UTF8);
    elm_scroller_policy_set(entry, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
    evas_object_smart_callback_add(entry, "maxlength,reached", maxlength_reached, nf);

    limit_filter_data.max_char_count = 0;
    limit_filter_data.max_byte_count = 100;
    elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &limit_filter_data);
    elm_object_part_text_set(entry, "elm.guide", "input your text");
    elm_entry_cursor_end_set(entry);
    evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
    evas_object_smart_callback_add(entry, "activated", _entry_enter_click, NULL);

    elm_object_part_content_set(layout, "entry_part", entry);
    elm_object_content_set(scroller, layout);

    evas_object_smart_callback_add(entry, "changed,user", _text_changed, data);

    elm_naviframe_item_push(nf, _("Single line entry"), NULL, NULL, scroller, "empty");

}

void entry_cb(void *data, Evas_Object *obj, void *event_info)
{
    appdata_s *ad = (appdata_s *)data;
    Evas_Object *genlist;
    Evas_Object *circle_genlist;
    Evas_Object *nf = ad->nf;
    Elm_Object_Item *nf_it;
    Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
    Elm_Genlist_Item_Class *ttc = elm_genlist_item_class_new();
    Elm_Genlist_Item_Class *ptc = elm_genlist_item_class_new();
    item_data *id;
    int index = 0;

    genlist = elm_genlist_add(nf);
    elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
    evas_object_smart_callback_add(genlist, "selected", gl_selected_cb, NULL);

    circle_genlist = eext_circle_object_genlist_add(genlist, ad->circle_surface);
    eext_circle_object_genlist_scroller_policy_set(circle_genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
    eext_rotary_object_event_activated_set(circle_genlist, EINA_TRUE);

    ttc->item_style = "title";
    ttc->func.text_get = _gl_menu_title_text_get;
    ttc->func.del = _gl_menu_del;

    itc->item_style = "default";
    itc->func.text_get = _gl_menu_text_get;
    itc->func.del = _gl_menu_del;

    ptc->item_style = "padding";
    ptc->func.del = _gl_menu_del;

    elm_genlist_item_append(genlist, ttc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);

    id = calloc(sizeof(item_data), 1);
    id->index = index++;
    id->item = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, _text_entry_cb, nf);

    elm_genlist_item_append(genlist, ptc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);

    elm_genlist_item_class_free(ttc);
    elm_genlist_item_class_free(itc);
    elm_genlist_item_class_free(ptc);

    nf_it = elm_naviframe_item_push(nf, "Entry", NULL, NULL, genlist, "empty");

}

 

Responses

1 Replies
Paul L

Hi, try to change

 limit_filter_data.max_char_count = 0; to

 

 limit_filter_data.max_char_count = 100;