#include "common/viewmgr.h"
#include "view/common/view_datetime.h"
+typedef struct {
+ Evas_Object *popup;
+ view_datetime_hide_cb hide_cb;
+ void *hide_cb_data;
+} view_datetime_data_t;
+
static void _DBG_datetime(Evas_Object *datetime);
-static void _set_spinner_btn_callbacks(Evas_Object *popup, Evas_Object *dt, int start_field, int end_field);
+static void _set_spinner_btn_callbacks(Evas_Object *popup, Evas_Object *dt, int start_field, int end_field, view_datetime_data_t *datetime_data);
static void _set_datetime_focus_chain(Evas_Object *datetime, int start_field, int end_field);
static void _datetime_btn_keydown_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
static void _datetime_focused_cb(int id, void *data, Evas_Object *obj, Elm_Object_Item *item);
static void _datetime_unfocused_cb(int id, void *data, Evas_Object *obj, Elm_Object_Item *item);
static void _datetime_keydown_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
+static void _datetime_destroy_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
static input_handler datetime_btn_handler = {
.key_down = _datetime_btn_keydown_cb,
.key_down = _datetime_keydown_cb,
};
-Evas_Object *view_datetime_create(Evas_Object *parent, const char *part, bool is_date)
+Evas_Object *view_datetime_create(Evas_Object *parent, const char *part, bool is_date, view_datetime_hide_cb hide_cb, void *cb_data)
{
SETTING_TRACE_BEGIN;
Eina_Bool field_ampm = !is_date;
Evas_Object *datetime = utils_add_datetime(parent, part,
field_year, field_month, field_date, field_hour, field_minute, field_ampm, NULL);
+ view_datetime_data_t *datetime_data = calloc(1, sizeof(view_datetime_data_t));
if (!datetime) {
dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] datetime == NULL", __FILE__, __LINE__);
evas_object_repeat_events_set(datetime, EINA_FALSE);
elm_object_focus_allow_set(datetime, EINA_TRUE);
+ datetime_data->popup = parent;
+ datetime_data->hide_cb = hide_cb;
+ datetime_data->hide_cb_data = cb_data;
+
_DBG_datetime(datetime);
- _set_spinner_btn_callbacks(parent, datetime, 0, 5);
+ _set_spinner_btn_callbacks(parent, datetime, 0, 5, datetime_data);
inputmgr_add_callback(datetime, 0, &datetime_handler, NULL);
+ evas_object_event_callback_add(datetime, EVAS_CALLBACK_DEL, _datetime_destroy_cb, (void *)datetime_data);
SETTING_TRACE_END;
return datetime;
_DBG_datetime(datetime);
}
+static void _datetime_destroy_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ free(data);
+}
+
static void _DBG_datetime(Evas_Object *datetime)
{
const char *datetime_style = elm_object_style_get(datetime);
static void _datetime_btn_keydown_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
{
- Evas_Object *popup = (Evas_Object *)data;
- Evas_Object *dt = elm_object_content_get(popup);
+ view_datetime_data_t *datetime_data = (view_datetime_data_t *)data;
+ Evas_Object *dt = elm_object_content_get(datetime_data->popup);
Evas_Object *spinner = view_datetime_get_spinner(dt, id);
double value = elm_spinner_value_get(spinner);
switch (ev->keycode) {
case KEY_ID_BACK:
case KEY_ID_ENTER:
- evas_object_hide(popup);
+ evas_object_hide(datetime_data->popup);
dlog_print(DLOG_DEBUG, LOG_TAG, "[%s:%d] btn PRESSED [KEY_ID_BACK]", __FILE__, __LINE__);
break;
case KEY_ID_UP:
dlog_print(DLOG_DEBUG, LOG_TAG, "[%s:%d] btn PRESSED [KEY_ID_DOWN]", __FILE__, __LINE__);
break;
}
+
+ if (datetime_data->hide_cb)
+ datetime_data->hide_cb(datetime_data->hide_cb_data, dt, (ev->keycode == KEY_ID_ENTER));
}
-static void _set_spinner_btn_callbacks(Evas_Object *popup, Evas_Object *dt, int start_field, int end_field)
+static void _set_spinner_btn_callbacks(Evas_Object *popup, Evas_Object *dt, int start_field, int end_field, view_datetime_data_t *datetime_data)
{
Evas_Object *btn;
int i;
for (i = start_field; i <= end_field; ++i) {
btn = view_datetime_get_spinner_button(dt, i);
- inputmgr_add_callback(btn, i, &datetime_btn_handler, popup);
+ inputmgr_add_callback(btn, i, &datetime_btn_handler, datetime_data);
evas_object_propagate_events_set(btn, EINA_FALSE);
}
}
return true;
}
-static void _datetime_popup_callback_hide_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+static void _datetime_popup_hide_cb(void *data, Evas_Object *dt, bool is_ok)
{
clock_view_priv_data *priv = data;
- elm_datetime_value_get(priv->datetime_popup_datetime, &priv->displayed_time);
- _set_displayed_time(priv, &priv->displayed_time, elm_check_state_get(priv->check_24));
+ if (is_ok) {
+ elm_datetime_value_get(priv->datetime_popup_datetime, &priv->displayed_time);
+ _set_displayed_time(priv, &priv->displayed_time, elm_check_state_get(priv->check_24));
+ }
}
static bool _datetime_popup_create(clock_view_priv_data *priv)
elm_object_style_set(priv->datetime_popup, "settings");
- priv->datetime_popup_datetime = view_datetime_create(priv->datetime_popup, NULL, false);
+ priv->datetime_popup_datetime = view_datetime_create(priv->datetime_popup, NULL, false, _datetime_popup_hide_cb, priv);
if (!priv->datetime_popup_datetime) {
dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] priv->datetime_popup == NULL", __FILE__, __LINE__);
return false;
}
elm_object_content_set(priv->datetime_popup, priv->datetime_popup_datetime);
- evas_object_event_callback_add(priv->datetime_popup, EVAS_CALLBACK_HIDE, _datetime_popup_callback_hide_cb, priv);
return true;
}