X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Flib%2Felm_datetime.c;h=8736e8dec978fc44845f874ecbe68530188bd1fb;hb=5f4011ee36175dd8296a198f33736d7d5cfbf890;hp=71fa004c8d6b5c7f87da9de3e097b5167e3a6483;hpb=9735bfe7e7ee2c34e3798b5ce508ad6592241ae6;p=framework%2Fuifw%2Felementary.git diff --git a/src/lib/elm_datetime.c b/src/lib/elm_datetime.c index 71fa004..8736e8d 100644 --- a/src/lib/elm_datetime.c +++ b/src/lib/elm_datetime.c @@ -74,19 +74,21 @@ struct _Format_Map char *fmt_char; int def_min; int def_max; + char *ignore_sep; }; // default limits for individual fields static Format_Map mapping[DATETIME_TYPE_COUNT] = { - [ELM_DATETIME_YEAR] = { "Yy", -1, -1 }, - [ELM_DATETIME_MONTH] = { "mbBh", 0, 11 }, - [ELM_DATETIME_DATE] = { "de", 1, 31 }, - [ELM_DATETIME_HOUR] = { "IHkl", 0, 23 }, - [ELM_DATETIME_MINUTE] = { "M", 0, 59 }, - [ELM_DATETIME_AMPM] = { "pP", 0, 1 } + [ELM_DATETIME_YEAR] = { "Yy", -1, -1, "" }, + [ELM_DATETIME_MONTH] = { "mbBh", 0, 11, "" }, + [ELM_DATETIME_DATE] = { "de", 1, 31, "" }, + [ELM_DATETIME_HOUR] = { "IHkl", 0, 23, "" }, + [ELM_DATETIME_MINUTE] = { "M", 0, 59, ":" }, + [ELM_DATETIME_AMPM] = { "pP", 0, 1, "" } }; static const char *multifield_formats = "cxXrRTDF"; +static const char *ignore_separators = "()"; static Datetime_Mod_Api *dt_mod = NULL; static const char *widtype = NULL; @@ -323,7 +325,7 @@ _theme_hook(Evas_Object *obj) snprintf(buf, sizeof(buf), EDC_PART_FIELD_ENABLE_SIG_STR, field->location); edje_object_signal_emit(wd->base, buf, "elm"); snprintf(buf, sizeof(buf), EDC_PART_SEPARATOR_STR, field->location); - edje_object_part_text_set(wd->base, buf, field->separator); + edje_object_part_text_escaped_set(wd->base, buf, field->separator); dt_mod->field_value_display(wd->mod_data, field->item_obj); } else @@ -347,7 +349,7 @@ _max_days_get(int year, int month) localtime_r(&t, &time1); time1.tm_year = year; time1.tm_mon = month; - for(day = MIN_DAYS_IN_MONTH; day <= mapping[ELM_DATETIME_DATE].def_max; day++) + for (day = MIN_DAYS_IN_MONTH; day <= mapping[ELM_DATETIME_DATE].def_max; day++) { time1.tm_mday = day; mktime(&time1); @@ -640,7 +642,7 @@ _parse_format(Evas_Object *obj, char *fmt_ptr) { Widget_Data *wd; Datetime_Field *field = NULL; - unsigned int len = 0, idx, location = 0; + unsigned int len = 0, idx = 0, location = 0; char separator[MAX_SEPARATOR_LEN]; char cur; Eina_Bool fmt_parsing = EINA_FALSE, sep_parsing = EINA_FALSE, @@ -678,9 +680,11 @@ _parse_format(Evas_Object *obj, char *fmt_ptr) separator[len] = 0; if (field) eina_stringshare_replace(&field->separator, separator); } + + // ignore the set of chars (global, field specific) as field separators. if (sep_parsing && (len < MAX_SEPARATOR_LEN - 1) && - (field->type != ELM_DATETIME_AMPM) && - (!((field->type == ELM_DATETIME_MINUTE) && (cur ==':')))) + (field->type != ELM_DATETIME_AMPM) && (!strchr(ignore_separators, cur)) && + (!strchr(mapping[idx].ignore_sep, cur))) separator[len++] = cur; if (sep_lookup) sep_parsing = EINA_TRUE; sep_lookup = EINA_FALSE; @@ -712,6 +716,7 @@ _reload_format(Evas_Object *obj) #endif dt_fmt = (char *)malloc(MAX_FORMAT_LEN); + if (!dt_fmt) return; strncpy(dt_fmt, wd->format, MAX_FORMAT_LEN); _expand_format(dt_fmt); @@ -746,7 +751,7 @@ _reload_format(Evas_Object *obj) edje_object_signal_emit(wd->base, buf, "elm"); } snprintf(buf, sizeof(buf), EDC_PART_SEPARATOR_STR, (field->location + 1)); - edje_object_part_text_set(wd->base, buf, field->separator); + edje_object_part_text_escaped_set(wd->base, buf, field->separator); } edje_object_message_signal_process(wd->base); _field_list_arrange(obj);