forked from enlightenment/efl
Efl.Ui.Calendar, elm_calendar: Code fixed to support auto repeat feature.
Summary: 1. Why there is a edje signal callback in elm_calendar? and do we need to maintain? We used edje part like a button before (3 years ago?), So there is a callbacks to get edje signal. Im pretty sure it is not use anymore. but we need to maintain backward compatibility. 2. elm_calendar using using repeat feature in efl_ui_button for it. why did i change it to manual timer? We opend elm_calendar_interval_set() APIs. Support this API the manual timer is proper then using button's feature. 3. why scroll freeze? and why only elm_calendar does it? When the user long press calendar button area and then move the scroll will be activated. it can prevent that weird action. efl_ui_calendar using button's feature. i not sure scroll freeze is deserve to attached in button side as a feature or not. So i will consider more for this case. 4. Why efl_ui_calendar doesn't have year buttons (double spinner case) After interface work, we don't accept style change in the runtime. so that featrue will be supported as API. The year_button_set/get() property should be added. but i dont know is it really needed... If the app developer want use year inc/dec button for efl_ui_calendar. they can inherit the class and make it easily. Test Plan: View, Action, API test in the elementary-test sample App. Ps. The issue of the calendar2 crash when it closed. It's not relative with this commit. its focus. i will look around. Reviewers: Hermet, zmike, ManMower, segfaultxavi, devilhorns Reviewed By: Hermet Subscribers: cedric, #committers, zmike Tags: #efl Differential Revision: https://phab.enlightenment.org/D6626
This commit is contained in:
parent
3ca3f865fd
commit
62a09f69a1
|
@ -21,6 +21,9 @@
|
|||
#define EFL_UI_CALENDAR_BUTTON_YEAR_LEFT "efl.calendar.button_year.left"
|
||||
#define EFL_UI_CALENDAR_BUTTON_YEAR_RIGHT "efl.calendar.button_year.right"
|
||||
|
||||
#define FIRST_INTERVAL 0.85
|
||||
#define INTERVAL 0.2
|
||||
|
||||
static const char PART_NAME_DEC_BUTTON[] = "dec_button";
|
||||
static const char PART_NAME_INC_BUTTON[] = "inc_button";
|
||||
|
||||
|
@ -36,20 +39,12 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = {
|
|||
};
|
||||
|
||||
static void
|
||||
_button_widget_month_dec_start(void *data,
|
||||
const Efl_Event *ev EINA_UNUSED);
|
||||
_inc_dec_btn_clicked_cb(void *data,
|
||||
const Efl_Event *ev);
|
||||
|
||||
static void
|
||||
_button_widget_month_dec_start_click(void *data,
|
||||
const Efl_Event *ev EINA_UNUSED);
|
||||
|
||||
static void
|
||||
_button_widget_month_inc_start(void *data,
|
||||
const Efl_Event *ev EINA_UNUSED);
|
||||
|
||||
static void
|
||||
_button_widget_month_inc_start_click(void *data,
|
||||
const Efl_Event *ev EINA_UNUSED);
|
||||
_inc_dec_btn_repeated_cb(void *data,
|
||||
const Efl_Event *ev);
|
||||
|
||||
static Eina_Bool _key_action_activate(Evas_Object *obj, const char *params);
|
||||
|
||||
|
@ -253,7 +248,7 @@ _access_calendar_item_register(Evas_Object *obj)
|
|||
{
|
||||
snprintf(pname, sizeof(pname), "efl.cit_%d.access", i);
|
||||
_elm_access_edje_object_part_object_unregister
|
||||
(obj, elm_layout_edje_get(obj), pname);
|
||||
(obj, elm_layout_edje_get(obj), pname);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -282,9 +277,6 @@ _access_calendar_spinner_register(Evas_Object *obj)
|
|||
ai = _elm_access_info_get(sd->month_access);
|
||||
_elm_access_text_set(ai, ELM_ACCESS_TYPE, E_("calendar month"));
|
||||
|
||||
ai = _elm_access_info_get(sd->year_access);
|
||||
_elm_access_text_set(ai, ELM_ACCESS_TYPE, E_("calendar year"));
|
||||
|
||||
o = elm_layout_edje_get(obj);
|
||||
edje_object_freeze(o);
|
||||
po = (Evas_Object *)edje_object_part_object_get(o, "month_text");
|
||||
|
@ -311,7 +303,6 @@ _flush_calendar_composite_elements(Evas_Object *obj, Efl_Ui_Calendar_Data *sd)
|
|||
EXTEND(sd->month_access);
|
||||
EXTEND(sd->dec_btn_month);
|
||||
EXTEND(sd->inc_btn_month);
|
||||
EXTEND(sd->year_access);
|
||||
|
||||
#undef EXTEND
|
||||
|
||||
|
@ -461,6 +452,21 @@ _set_headers(Evas_Object *obj)
|
|||
elm_layout_thaw(obj);
|
||||
}
|
||||
|
||||
static Eo *
|
||||
_btn_create(Eo *obj, const char *style, char *part)
|
||||
{
|
||||
return efl_add(EFL_UI_BUTTON_CLASS, obj,
|
||||
elm_widget_element_update(obj, efl_added, style),
|
||||
efl_ui_autorepeat_enabled_set(efl_added, EINA_TRUE),
|
||||
efl_ui_autorepeat_initial_timeout_set(efl_added, FIRST_INTERVAL),
|
||||
efl_ui_autorepeat_gap_timeout_set(efl_added, INTERVAL),
|
||||
efl_event_callback_add(efl_added, EFL_UI_EVENT_CLICKED,
|
||||
_inc_dec_btn_clicked_cb, obj),
|
||||
efl_event_callback_add(efl_added, EFL_UI_EVENT_REPEATED,
|
||||
_inc_dec_btn_repeated_cb, obj),
|
||||
efl_content_set(efl_part(obj, part), efl_added));
|
||||
}
|
||||
|
||||
static void
|
||||
_spinner_buttons_add(Evas_Object *obj, Efl_Ui_Calendar_Data *sd)
|
||||
{
|
||||
|
@ -476,21 +482,9 @@ _spinner_buttons_add(Evas_Object *obj, Efl_Ui_Calendar_Data *sd)
|
|||
}
|
||||
|
||||
if (!sd->dec_btn_month)
|
||||
{
|
||||
sd->dec_btn_month =
|
||||
efl_add(EFL_UI_BUTTON_CLASS, obj,
|
||||
elm_widget_element_update(obj, efl_added, PART_NAME_DEC_BUTTON),
|
||||
efl_ui_autorepeat_enabled_set(efl_added, EINA_TRUE),
|
||||
efl_ui_autorepeat_initial_timeout_set(efl_added, 0.5),
|
||||
efl_ui_autorepeat_gap_timeout_set(efl_added, 0.2));
|
||||
|
||||
efl_event_callback_add(sd->dec_btn_month, EFL_UI_EVENT_CLICKED,
|
||||
_button_widget_month_dec_start_click, obj);
|
||||
efl_event_callback_add(sd->dec_btn_month, EFL_UI_EVENT_REPEATED,
|
||||
_button_widget_month_dec_start, obj);
|
||||
}
|
||||
elm_layout_content_set(obj, EFL_UI_CALENDAR_BUTTON_LEFT, sd->dec_btn_month);
|
||||
sd->dec_btn_month = _btn_create(obj, PART_NAME_DEC_BUTTON, EFL_UI_CALENDAR_BUTTON_LEFT);
|
||||
}
|
||||
|
||||
else if (sd->dec_btn_month && !efl_isa(sd->dec_btn_month, ELM_ACCESS_CLASS))
|
||||
{
|
||||
evas_object_del(sd->dec_btn_month);
|
||||
|
@ -507,20 +501,7 @@ _spinner_buttons_add(Evas_Object *obj, Efl_Ui_Calendar_Data *sd)
|
|||
}
|
||||
|
||||
if (!sd->inc_btn_month)
|
||||
{
|
||||
sd->inc_btn_month =
|
||||
efl_add(EFL_UI_BUTTON_CLASS, obj,
|
||||
elm_widget_element_update(obj, efl_added, PART_NAME_INC_BUTTON),
|
||||
efl_ui_autorepeat_enabled_set(efl_added, EINA_TRUE),
|
||||
efl_ui_autorepeat_initial_timeout_set(efl_added, 0.5),
|
||||
efl_ui_autorepeat_gap_timeout_set(efl_added, 0.2));
|
||||
|
||||
efl_event_callback_add(sd->inc_btn_month, EFL_UI_EVENT_CLICKED,
|
||||
_button_widget_month_inc_start_click, obj);
|
||||
efl_event_callback_add(sd->inc_btn_month, EFL_UI_EVENT_REPEATED,
|
||||
_button_widget_month_inc_start, obj);
|
||||
}
|
||||
elm_layout_content_set(obj, EFL_UI_CALENDAR_BUTTON_RIGHT, sd->inc_btn_month);
|
||||
sd->inc_btn_month = _btn_create(obj, PART_NAME_INC_BUTTON, EFL_UI_CALENDAR_BUTTON_RIGHT);
|
||||
}
|
||||
else if (sd->inc_btn_month && !efl_isa(sd->inc_btn_month, ELM_ACCESS_CLASS))
|
||||
{
|
||||
|
@ -645,77 +626,35 @@ _update_data(Evas_Object *obj, int delta)
|
|||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_spin_month_value(void *data)
|
||||
static void
|
||||
_spin_value(void *data)
|
||||
{
|
||||
EFL_UI_CALENDAR_DATA_GET(data, sd);
|
||||
|
||||
if (_update_data(data, sd->spin_speed))
|
||||
evas_object_smart_changed(data);
|
||||
|
||||
sd->interval = sd->interval / 1.05;
|
||||
ecore_timer_interval_set(sd->spin_month, sd->interval);
|
||||
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
||||
static void
|
||||
_button_widget_month_inc_start_click(void *data,
|
||||
const Efl_Event *ev EINA_UNUSED)
|
||||
_inc_dec_btn_clicked_cb(void *data,
|
||||
const Efl_Event *ev)
|
||||
{
|
||||
EFL_UI_CALENDAR_DATA_GET(data, sd);
|
||||
if (sd->month_repeated)
|
||||
{
|
||||
sd->month_repeated = EINA_FALSE;
|
||||
return;
|
||||
}
|
||||
|
||||
sd->interval = sd->first_interval;
|
||||
sd->spin_speed = 1;
|
||||
_spin_month_value(data);
|
||||
sd->spin_speed = (ev->object == sd->inc_btn_month) ? 1 : -1;
|
||||
|
||||
_spin_value(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_button_widget_month_inc_start(void *data,
|
||||
const Efl_Event *ev EINA_UNUSED)
|
||||
_inc_dec_btn_repeated_cb(void *data,
|
||||
const Efl_Event *ev)
|
||||
{
|
||||
EFL_UI_CALENDAR_DATA_GET(data, sd);
|
||||
|
||||
sd->spin_speed = 1;
|
||||
if (!sd->month_repeated)
|
||||
sd->interval = sd->first_interval;
|
||||
sd->month_repeated = EINA_TRUE;
|
||||
_spin_month_value(data);
|
||||
sd->spin_speed = (ev->object == sd->inc_btn_month) ? 1 : -1;
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
_button_widget_month_dec_start_click(void *data,
|
||||
const Efl_Event *ev EINA_UNUSED)
|
||||
{
|
||||
EFL_UI_CALENDAR_DATA_GET(data, sd);
|
||||
if (sd->month_repeated)
|
||||
{
|
||||
sd->month_repeated = EINA_FALSE;
|
||||
return;
|
||||
}
|
||||
|
||||
sd->interval = sd->first_interval;
|
||||
sd->spin_speed = -1;
|
||||
_spin_month_value(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_button_widget_month_dec_start(void *data,
|
||||
const Efl_Event *ev EINA_UNUSED)
|
||||
{
|
||||
EFL_UI_CALENDAR_DATA_GET(data, sd);
|
||||
|
||||
sd->spin_speed = -1;
|
||||
if (!sd->month_repeated)
|
||||
sd->interval = sd->first_interval;
|
||||
sd->month_repeated = EINA_TRUE;
|
||||
_spin_month_value(data);
|
||||
_spin_value(data);
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -900,8 +839,6 @@ _efl_ui_calendar_efl_object_destructor(Eo *obj, Efl_Ui_Calendar_Data *sd)
|
|||
{
|
||||
int i;
|
||||
|
||||
ecore_timer_del(sd->spin_month);
|
||||
ecore_timer_del(sd->spin_year);
|
||||
ecore_timer_del(sd->update_timer);
|
||||
|
||||
efl_ui_format_cb_set(obj, NULL, NULL, NULL);
|
||||
|
@ -936,7 +873,7 @@ _access_obj_process(Evas_Object *obj, Eina_Bool is_access)
|
|||
snprintf(pname, sizeof(pname), "efl.cit_%d.access", i);
|
||||
|
||||
_elm_access_edje_object_part_object_unregister
|
||||
(obj, elm_layout_edje_get(obj), pname);
|
||||
(obj, elm_layout_edje_get(obj), pname);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -975,7 +912,6 @@ _efl_ui_calendar_constructor_internal(Eo *obj, Efl_Ui_Calendar_Data *priv)
|
|||
|
||||
elm_widget_sub_object_parent_add(obj);
|
||||
|
||||
priv->first_interval = 0.85;
|
||||
priv->date_min.tm_year = 2;
|
||||
priv->date_min.tm_mon = 0;
|
||||
priv->date_min.tm_mday = 1;
|
||||
|
|
|
@ -31,15 +31,12 @@ struct _Efl_Ui_Calendar_Data
|
|||
double interval, first_interval;
|
||||
int spin_speed;
|
||||
int today_it, selected_it, focused_it;
|
||||
Ecore_Timer *spin_month, *spin_year, *update_timer;
|
||||
Ecore_Timer *update_timer;
|
||||
const char *weekdays[ELM_DAY_LAST];
|
||||
struct tm current_date, shown_date, date, date_min, date_max;
|
||||
Evas_Object *inc_btn_month;
|
||||
Evas_Object *dec_btn_month;
|
||||
Evas_Object *month_access;
|
||||
Evas_Object *inc_btn_year;
|
||||
Evas_Object *dec_btn_year;
|
||||
Evas_Object *year_access;
|
||||
Eo *items[42];
|
||||
|
||||
Efl_Ui_Calendar_Weekday first_week_day;
|
||||
|
@ -51,11 +48,8 @@ struct _Efl_Ui_Calendar_Data
|
|||
Eina_Strbuf *format_strbuf;
|
||||
|
||||
Eina_Bool selected : 1;
|
||||
Eina_Bool double_spinners : 1;
|
||||
Eina_Bool filling : 1;
|
||||
Eina_Bool weekdays_set : 1;
|
||||
Eina_Bool month_repeated : 1;
|
||||
Eina_Bool year_repeated : 1;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -65,38 +65,19 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = {
|
|||
* But, it is replaced by elm_button widget objects. The following
|
||||
* callback functions are also newly added for button objects.
|
||||
* We still keep the old signal callback functions for backward compatibility. */
|
||||
|
||||
static void
|
||||
_button_widget_month_inc_start_click(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED);
|
||||
_inc_dec_button_clicked_cb(void *data, const Efl_Event *event EINA_UNUSED);
|
||||
static void
|
||||
_button_widget_month_inc_start(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED);
|
||||
_inc_dec_button_pressed_cb(void *data, const Efl_Event *event);
|
||||
static void
|
||||
_button_widget_month_dec_start_click(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED);
|
||||
static void
|
||||
_button_widget_month_dec_start(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED);
|
||||
static void
|
||||
_button_widget_year_inc_start_click(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED);
|
||||
static void
|
||||
_button_widget_year_inc_start(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED);
|
||||
static void
|
||||
_button_widget_year_dec_start_click(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED);
|
||||
static void
|
||||
_button_widget_year_dec_start(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED);
|
||||
_inc_dec_button_unpressed_cb(void *data, const Efl_Event *event EINA_UNUSED);
|
||||
|
||||
EFL_CALLBACKS_ARRAY_DEFINE( _inc_dec_button_cb,
|
||||
{ EFL_UI_EVENT_CLICKED, _inc_dec_button_clicked_cb},
|
||||
{ EFL_UI_EVENT_PRESSED, _inc_dec_button_pressed_cb},
|
||||
{ EFL_UI_EVENT_UNPRESSED, _inc_dec_button_unpressed_cb}
|
||||
);
|
||||
|
||||
static Eina_Bool _key_action_activate(Evas_Object *obj, const char *params);
|
||||
|
||||
|
@ -776,11 +757,7 @@ _spinner_buttons_add(Evas_Object *obj, Elm_Calendar_Data *sd)
|
|||
if (!sd->dec_btn_month)
|
||||
{
|
||||
sd->dec_btn_month = elm_button_add(obj);
|
||||
elm_button_autorepeat_set(sd->dec_btn_month, EINA_TRUE);
|
||||
elm_button_autorepeat_initial_timeout_set(sd->dec_btn_month, 0.5);
|
||||
elm_button_autorepeat_gap_timeout_set(sd->dec_btn_month, 0.2);
|
||||
evas_object_smart_callback_add(sd->dec_btn_month, "clicked", _button_widget_month_dec_start_click, obj);
|
||||
evas_object_smart_callback_add(sd->dec_btn_month, "repeated", _button_widget_month_dec_start, obj);
|
||||
efl_event_callback_array_add(sd->dec_btn_month, _inc_dec_button_cb(), obj);
|
||||
}
|
||||
|
||||
elm_object_style_set(sd->dec_btn_month, left_buf);
|
||||
|
@ -804,11 +781,7 @@ _spinner_buttons_add(Evas_Object *obj, Elm_Calendar_Data *sd)
|
|||
if (!sd->inc_btn_month)
|
||||
{
|
||||
sd->inc_btn_month = elm_button_add(obj);
|
||||
elm_button_autorepeat_set(sd->inc_btn_month, EINA_TRUE);
|
||||
elm_button_autorepeat_initial_timeout_set(sd->inc_btn_month, 0.5);
|
||||
elm_button_autorepeat_gap_timeout_set(sd->inc_btn_month, 0.2);
|
||||
evas_object_smart_callback_add(sd->inc_btn_month, "clicked", _button_widget_month_inc_start_click, obj);
|
||||
evas_object_smart_callback_add(sd->inc_btn_month, "repeated", _button_widget_month_inc_start, obj);
|
||||
efl_event_callback_array_add(sd->inc_btn_month, _inc_dec_button_cb(), obj);
|
||||
}
|
||||
|
||||
elm_object_style_set(sd->inc_btn_month, right_buf);
|
||||
|
@ -832,12 +805,8 @@ _spinner_buttons_add(Evas_Object *obj, Elm_Calendar_Data *sd)
|
|||
if (!sd->dec_btn_year)
|
||||
{
|
||||
sd->dec_btn_year = elm_button_add(obj);
|
||||
elm_button_autorepeat_set(sd->dec_btn_year, EINA_TRUE);
|
||||
elm_button_autorepeat_initial_timeout_set(sd->dec_btn_year, 0.5);
|
||||
elm_button_autorepeat_gap_timeout_set(sd->dec_btn_year, 0.2);
|
||||
evas_object_smart_callback_add(sd->dec_btn_year, "clicked", _button_widget_year_dec_start_click, obj);
|
||||
evas_object_smart_callback_add(sd->dec_btn_year, "repeated", _button_widget_year_dec_start, obj);
|
||||
}
|
||||
efl_event_callback_array_add(sd->dec_btn_year, _inc_dec_button_cb(), obj);
|
||||
}
|
||||
|
||||
elm_object_style_set(sd->dec_btn_year, left_buf);
|
||||
elm_layout_content_set(obj, ELM_CALENDAR_BUTTON_YEAR_LEFT, sd->dec_btn_year);
|
||||
|
@ -860,11 +829,7 @@ _spinner_buttons_add(Evas_Object *obj, Elm_Calendar_Data *sd)
|
|||
if (!sd->inc_btn_year)
|
||||
{
|
||||
sd->inc_btn_year = elm_button_add(obj);
|
||||
elm_button_autorepeat_set(sd->inc_btn_year, EINA_TRUE);
|
||||
elm_button_autorepeat_initial_timeout_set(sd->inc_btn_year, 0.5);
|
||||
elm_button_autorepeat_gap_timeout_set(sd->inc_btn_year, 0.2);
|
||||
evas_object_smart_callback_add(sd->inc_btn_year, "clicked", _button_widget_year_inc_start_click, obj);
|
||||
evas_object_smart_callback_add(sd->inc_btn_year, "repeated", _button_widget_year_inc_start, obj);
|
||||
efl_event_callback_array_add(sd->inc_btn_year, _inc_dec_button_cb(), obj);
|
||||
}
|
||||
|
||||
elm_object_style_set(sd->inc_btn_year, right_buf);
|
||||
|
@ -1004,29 +969,15 @@ _update_data(Evas_Object *obj, Eina_Bool month,
|
|||
}
|
||||
|
||||
static Eina_Bool
|
||||
_spin_month_value(void *data)
|
||||
_spin_value(void *data)
|
||||
{
|
||||
ELM_CALENDAR_DATA_GET(data, sd);
|
||||
|
||||
if (_update_data(data, EINA_TRUE, sd->spin_speed))
|
||||
if (_update_data(data, sd->month_btn_clicked, sd->spin_speed))
|
||||
evas_object_smart_changed(data);
|
||||
|
||||
sd->interval = sd->interval / 1.05;
|
||||
ecore_timer_interval_set(sd->spin_month, sd->interval);
|
||||
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_spin_year_value(void *data)
|
||||
{
|
||||
ELM_CALENDAR_DATA_GET(data, sd);
|
||||
|
||||
if (_update_data(data, EINA_FALSE, sd->spin_speed))
|
||||
evas_object_smart_changed(data);
|
||||
|
||||
sd->interval = sd->interval / 1.05;
|
||||
ecore_timer_interval_set(sd->spin_year, sd->interval);
|
||||
ecore_timer_interval_set(sd->spin_timer, sd->interval);
|
||||
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
@ -1042,10 +993,13 @@ _button_month_inc_start(void *data,
|
|||
|
||||
sd->interval = sd->first_interval;
|
||||
sd->spin_speed = 1;
|
||||
ecore_timer_del(sd->spin_month);
|
||||
sd->spin_month = ecore_timer_add(sd->interval, _spin_month_value, data);
|
||||
sd->month_btn_clicked = EINA_TRUE;
|
||||
ecore_timer_del(sd->spin_timer);
|
||||
sd->spin_timer = ecore_timer_add(sd->interval, _spin_value, data);
|
||||
|
||||
_spin_month_value(data);
|
||||
elm_widget_scroll_freeze_push(data);
|
||||
|
||||
_spin_value(data);
|
||||
}
|
||||
|
||||
/* Legacy callbacks for signals from edje */
|
||||
|
@ -1059,10 +1013,13 @@ _button_month_dec_start(void *data,
|
|||
|
||||
sd->interval = sd->first_interval;
|
||||
sd->spin_speed = -1;
|
||||
ecore_timer_del(sd->spin_month);
|
||||
sd->spin_month = ecore_timer_add(sd->interval, _spin_month_value, data);
|
||||
sd->month_btn_clicked = EINA_TRUE;
|
||||
ecore_timer_del(sd->spin_timer);
|
||||
sd->spin_timer = ecore_timer_add(sd->interval, _spin_value, data);
|
||||
|
||||
_spin_month_value(data);
|
||||
elm_widget_scroll_freeze_push(data);
|
||||
|
||||
_spin_value(data);
|
||||
}
|
||||
|
||||
/* Legacy callbacks for signals from edje */
|
||||
|
@ -1075,7 +1032,9 @@ _button_month_stop(void *data,
|
|||
ELM_CALENDAR_DATA_GET(data, sd);
|
||||
|
||||
sd->interval = sd->first_interval;
|
||||
ELM_SAFE_FREE(sd->spin_month, ecore_timer_del);
|
||||
ELM_SAFE_FREE(sd->spin_timer, ecore_timer_del);
|
||||
|
||||
elm_widget_scroll_freeze_pop(obj);
|
||||
}
|
||||
|
||||
/* Legacy callbacks for signals from edje */
|
||||
|
@ -1089,10 +1048,13 @@ _button_year_inc_start(void *data,
|
|||
|
||||
sd->interval = sd->first_interval;
|
||||
sd->spin_speed = 1;
|
||||
ecore_timer_del(sd->spin_year);
|
||||
sd->spin_year = ecore_timer_add(sd->interval, _spin_year_value, data);
|
||||
sd->month_btn_clicked = EINA_FALSE;
|
||||
ecore_timer_del(sd->spin_timer);
|
||||
sd->spin_timer = ecore_timer_add(sd->interval, _spin_value, data);
|
||||
|
||||
_spin_year_value(data);
|
||||
elm_widget_scroll_freeze_push(data);
|
||||
|
||||
_spin_value(data);
|
||||
}
|
||||
|
||||
/* Legacy callbacks for signals from edje */
|
||||
|
@ -1106,10 +1068,13 @@ _button_year_dec_start(void *data,
|
|||
|
||||
sd->interval = sd->first_interval;
|
||||
sd->spin_speed = -1;
|
||||
ecore_timer_del(sd->spin_year);
|
||||
sd->spin_year = ecore_timer_add(sd->interval, _spin_year_value, data);
|
||||
sd->month_btn_clicked = EINA_FALSE;
|
||||
ecore_timer_del(sd->spin_timer);
|
||||
sd->spin_timer = ecore_timer_add(sd->interval, _spin_value, data);
|
||||
|
||||
_spin_year_value(data);
|
||||
elm_widget_scroll_freeze_push(data);
|
||||
|
||||
_spin_value(data);
|
||||
}
|
||||
|
||||
/* Legacy callbacks for signals from edje */
|
||||
|
@ -1122,132 +1087,48 @@ _button_year_stop(void *data,
|
|||
ELM_CALENDAR_DATA_GET(data, sd);
|
||||
|
||||
sd->interval = sd->first_interval;
|
||||
ELM_SAFE_FREE(sd->spin_year, ecore_timer_del);
|
||||
ELM_SAFE_FREE(sd->spin_timer, ecore_timer_del);
|
||||
|
||||
elm_widget_scroll_freeze_pop(obj);
|
||||
}
|
||||
|
||||
static void
|
||||
_button_widget_month_inc_start_click(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED)
|
||||
_inc_dec_button_clicked_cb(void *data, const Efl_Event *event EINA_UNUSED)
|
||||
{
|
||||
ELM_CALENDAR_DATA_GET(data, sd);
|
||||
if (sd->month_repeated)
|
||||
{
|
||||
sd->month_repeated = EINA_FALSE;
|
||||
return;
|
||||
}
|
||||
|
||||
sd->interval = sd->first_interval;
|
||||
sd->spin_speed = 1;
|
||||
_spin_month_value(data);
|
||||
}
|
||||
ELM_SAFE_FREE(sd->spin_timer, ecore_timer_del);
|
||||
|
||||
_spin_value(data);
|
||||
}
|
||||
static void
|
||||
_button_widget_month_inc_start(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED)
|
||||
_inc_dec_button_pressed_cb(void *data, const Efl_Event *event)
|
||||
{
|
||||
ELM_CALENDAR_DATA_GET(data, sd);
|
||||
|
||||
sd->spin_speed = 1;
|
||||
if (!sd->month_repeated)
|
||||
sd->interval = sd->first_interval;
|
||||
sd->month_repeated = EINA_TRUE;
|
||||
_spin_month_value(data);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
_button_widget_month_dec_start_click(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED)
|
||||
{
|
||||
ELM_CALENDAR_DATA_GET(data, sd);
|
||||
if (sd->month_repeated)
|
||||
{
|
||||
sd->month_repeated = EINA_FALSE;
|
||||
return;
|
||||
}
|
||||
|
||||
sd->interval = sd->first_interval;
|
||||
sd->spin_speed = -1;
|
||||
_spin_month_value(data);
|
||||
sd->spin_speed = ((sd->inc_btn_month == event->object) ||
|
||||
(sd->inc_btn_year == event->object)) ? 1 : -1;
|
||||
|
||||
sd->month_btn_clicked = ((sd->inc_btn_month == event->object) ||
|
||||
(sd->dec_btn_month == event->object)) ? EINA_TRUE : EINA_FALSE;
|
||||
|
||||
ELM_SAFE_FREE(sd->spin_timer, ecore_timer_del);
|
||||
sd->spin_timer = ecore_timer_add(sd->interval, _spin_value, data);
|
||||
|
||||
elm_widget_scroll_freeze_push(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_button_widget_month_dec_start(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED)
|
||||
_inc_dec_button_unpressed_cb(void *data, const Efl_Event *event EINA_UNUSED)
|
||||
{
|
||||
ELM_CALENDAR_DATA_GET(data, sd);
|
||||
|
||||
sd->spin_speed = -1;
|
||||
if (!sd->month_repeated)
|
||||
sd->interval = sd->first_interval;
|
||||
sd->month_repeated = EINA_TRUE;
|
||||
_spin_month_value(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_button_widget_year_inc_start_click(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED)
|
||||
{
|
||||
ELM_CALENDAR_DATA_GET(data, sd);
|
||||
if (sd->year_repeated)
|
||||
{
|
||||
sd->year_repeated = EINA_FALSE;
|
||||
return;
|
||||
}
|
||||
|
||||
sd->interval = sd->first_interval;
|
||||
sd->spin_speed = 1;
|
||||
_spin_year_value(data);
|
||||
}
|
||||
ELM_SAFE_FREE(sd->spin_timer, ecore_timer_del);
|
||||
|
||||
static void
|
||||
_button_widget_year_inc_start(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED)
|
||||
{
|
||||
ELM_CALENDAR_DATA_GET(data, sd);
|
||||
|
||||
sd->spin_speed = 1;
|
||||
if (!sd->year_repeated)
|
||||
sd->interval = sd->first_interval;
|
||||
sd->year_repeated = EINA_TRUE;
|
||||
_spin_year_value(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_button_widget_year_dec_start_click(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED)
|
||||
{
|
||||
ELM_CALENDAR_DATA_GET(data, sd);
|
||||
if (sd->year_repeated)
|
||||
{
|
||||
sd->year_repeated = EINA_FALSE;
|
||||
return;
|
||||
}
|
||||
|
||||
sd->interval = sd->first_interval;
|
||||
sd->spin_speed = -1;
|
||||
_spin_year_value(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_button_widget_year_dec_start(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED)
|
||||
{
|
||||
ELM_CALENDAR_DATA_GET(data, sd);
|
||||
|
||||
sd->spin_speed = -1;
|
||||
if (!sd->year_repeated)
|
||||
sd->interval = sd->first_interval;
|
||||
sd->year_repeated = EINA_TRUE;
|
||||
_spin_year_value(data);
|
||||
elm_widget_scroll_freeze_pop(data);
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -1530,8 +1411,7 @@ _elm_calendar_efl_canvas_group_group_del(Eo *obj, Elm_Calendar_Data *sd)
|
|||
int i;
|
||||
Elm_Calendar_Mark *mark;
|
||||
|
||||
ecore_timer_del(sd->spin_month);
|
||||
ecore_timer_del(sd->spin_year);
|
||||
ecore_timer_del(sd->spin_timer);
|
||||
ecore_timer_del(sd->update_timer);
|
||||
|
||||
if (sd->marks)
|
||||
|
|
|
@ -39,7 +39,7 @@ struct _Elm_Calendar_Data
|
|||
double interval, first_interval;
|
||||
int spin_speed;
|
||||
int today_it, selected_it, focused_it;
|
||||
Ecore_Timer *spin_month, *spin_year, *update_timer;
|
||||
Ecore_Timer *update_timer, *spin_timer;
|
||||
Elm_Calendar_Format_Cb format_func;
|
||||
const char *weekdays[ELM_DAY_LAST];
|
||||
struct tm current_time, selected_time, shown_time, date_min, date_max;
|
||||
|
@ -62,8 +62,7 @@ struct _Elm_Calendar_Data
|
|||
Eina_Bool double_spinners : 1;
|
||||
Eina_Bool filling : 1;
|
||||
Eina_Bool weekdays_set : 1;
|
||||
Eina_Bool month_repeated : 1;
|
||||
Eina_Bool year_repeated : 1;
|
||||
Eina_Bool month_btn_clicked : 1;
|
||||
};
|
||||
|
||||
struct _Elm_Calendar_Mark
|
||||
|
|
Loading…
Reference in New Issue