summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLarry Jr <larry.olj@gmail.com>2016-07-19 19:47:46 -0300
committerLarry Jr <larry.olj@gmail.com>2016-07-28 15:19:52 -0300
commit85a34db455c5c94ebf920ebb13f00c456aca9613 (patch)
tree6ec37d2e4a3b94aeee252852f3ed62436697ab5e
parent0dfe2ccde8a3c372d57d3e03a4f1ab156a510add (diff)
downloadefl-85a34db455c5c94ebf920ebb13f00c456aca9613.tar.gz
efl_ui_image: added filename and icon in model_connect name
-rw-r--r--src/lib/elementary/efl_ui_image.c51
-rw-r--r--src/lib/elementary/efl_ui_image_factory.c2
-rw-r--r--src/lib/elementary/efl_ui_widget_image.h2
3 files changed, 41 insertions, 14 deletions
diff --git a/src/lib/elementary/efl_ui_image.c b/src/lib/elementary/efl_ui_image.c
index 37c2e74519..8aa552e6ab 100644
--- a/src/lib/elementary/efl_ui_image.c
+++ b/src/lib/elementary/efl_ui_image.c
@@ -637,6 +637,12 @@ _efl_ui_image_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Image_Data *sd)
sd->async.th = NULL;
}
+ if (sd->ppromise)
+ {
+ eina_promise_cancel(sd->ppromise);
+ sd->ppromise = NULL;
+ }
+
if (sd->model)
{
eo_event_callback_del(sd->model, EFL_MODEL_EVENT_PROPERTIES_CHANGED,
@@ -1698,9 +1704,11 @@ _efl_ui_image_icon_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
}
static void
-_prop_promise_error_cb(void* data EINA_UNUSED, Eina_Error err EINA_UNUSED)
+_prop_promise_error_cb(void* data, Eina_Error err EINA_UNUSED)
{
-
+ Eo *obj = data;
+ EFL_UI_IMAGE_DATA_GET(obj, pd);
+ pd->ppromise = NULL;
}
static void
@@ -1709,18 +1717,22 @@ _prop_promise_then_cb(void* data, void* v)
Eo *obj = data;
Eina_Value *value = v;
char *text;
+ EFL_UI_IMAGE_DATA_GET(obj, pd);
+ pd->ppromise = NULL;
const Eina_Value_Type *vtype = eina_value_type_get(value);
if (vtype == EINA_VALUE_TYPE_STRING || vtype == EINA_VALUE_TYPE_STRINGSHARE)
{
eina_value_get(value, &text);
- elm_image_file_set(obj, text, NULL);
+ if (pd->con_icon) efl_ui_image_icon_set(obj, text);
+ else elm_image_file_set(obj, text, NULL);
}
else
{
text = eina_value_to_string(value);
- elm_image_file_set(obj, text, NULL);
+ if (pd->con_icon) efl_ui_image_icon_set(obj, text);
+ else elm_image_file_set(obj, text, NULL);
free(text);
}
}
@@ -1736,7 +1748,6 @@ _efl_ui_image_model_properties_changed_cb(void *data, const Eo_Event *event)
if (pd->model && pd->prop_con)
{
- Eina_Promise *promise;
Eina_Array_Iterator it;
const char *prop;
unsigned int i;
@@ -1745,8 +1756,10 @@ _efl_ui_image_model_properties_changed_cb(void *data, const Eo_Event *event)
{
if (!strcmp(pd->prop_con, prop))
{
- promise = efl_model_property_get(pd->model, pd->prop_con);
- eina_promise_then(promise, &_prop_promise_then_cb, &_prop_promise_error_cb, data);
+ if (pd->ppromise) eina_promise_cancel(pd->ppromise);
+
+ pd->ppromise = efl_model_property_get(pd->model, pd->prop_con);
+ eina_promise_then(pd->ppromise, &_prop_promise_then_cb, &_prop_promise_error_cb, data);
return;
}
}
@@ -1774,9 +1787,11 @@ _efl_ui_image_efl_ui_view_model_set(Eo *obj, Efl_Ui_Image_Data *pd, Efl_Model *m
if (pd->prop_con && pd->model)
{
- Eina_Promise *promise = efl_model_property_get(pd->model, pd->prop_con);
- eina_promise_then(promise, &_prop_promise_then_cb,
- &_prop_promise_error_cb, obj);
+ if (pd->ppromise) eina_promise_cancel(pd->ppromise);
+
+ pd->ppromise = efl_model_property_get(pd->model, pd->prop_con);
+ eina_promise_then(pd->ppromise, &_prop_promise_then_cb,
+ &_prop_promise_error_cb, obj);
}
}
@@ -1787,14 +1802,24 @@ _efl_ui_image_efl_ui_view_model_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *pd)
}
EOLIAN static void
-_efl_ui_image_efl_ui_model_connect_connect(Eo *obj, Efl_Ui_Image_Data *pd, const char *name EINA_UNUSED, const char *property)
+_efl_ui_image_efl_ui_model_connect_connect(Eo *obj, Efl_Ui_Image_Data *pd, const char *name, const char *property)
{
+ pd->con_icon = EINA_FALSE;
+ if (strcmp(name, "filename") != 0)
+ {
+ if (strcmp(name, "icon") != 0) return;
+
+ pd->con_icon = EINA_TRUE;
+ }
+
eina_stringshare_replace(&pd->prop_con, property);
if (pd->model && pd->prop_con)
{
- Eina_Promise *promise = efl_model_property_get(pd->model, pd->prop_con);
- eina_promise_then(promise, &_prop_promise_then_cb,
+ if (pd->ppromise) eina_promise_cancel(pd->ppromise);
+
+ pd->ppromise = efl_model_property_get(pd->model, pd->prop_con);
+ eina_promise_then(pd->ppromise, &_prop_promise_then_cb,
&_prop_promise_error_cb, obj);
}
}
diff --git a/src/lib/elementary/efl_ui_image_factory.c b/src/lib/elementary/efl_ui_image_factory.c
index 3efe6cfdfc..4a1cdd282b 100644
--- a/src/lib/elementary/efl_ui_image_factory.c
+++ b/src/lib/elementary/efl_ui_image_factory.c
@@ -39,7 +39,7 @@ _efl_ui_image_factory_efl_ui_factory_create(Eo *obj EINA_UNUSED, Efl_Ui_Image_Fa
EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
Efl_Canvas *ui_view = eo_add(EFL_UI_IMAGE_CLASS, parent);
efl_ui_view_model_set(ui_view, model);
- efl_ui_model_connect(ui_view, NULL, pd->property);
+ efl_ui_model_connect(ui_view, "filename", pd->property);
return ui_view;
}
diff --git a/src/lib/elementary/efl_ui_widget_image.h b/src/lib/elementary/efl_ui_widget_image.h
index 778412ee85..86564ad69e 100644
--- a/src/lib/elementary/efl_ui_widget_image.h
+++ b/src/lib/elementary/efl_ui_widget_image.h
@@ -80,6 +80,7 @@ struct _Efl_Ui_Image_Data
Efl_Model *model;
Eina_Stringshare *prop_con;
+ Eina_Promise *ppromise;
struct {
int requested_size;
@@ -100,6 +101,7 @@ struct _Efl_Ui_Image_Data
Eina_Bool async_failed : 1;
Eina_Bool scale_up : 1;
Eina_Bool scale_down : 1;
+ Eina_Bool con_icon : 1;
};
/**