forked from enlightenment/enventor
fix the part flickering issue.
This problem comes out with a third scenario, which is, if user uses a ctxpopup slider to change the attributions of the more than first part state. In this case, the edj will be reloaded if the attributions are changed. But still the cursor would be inside of the state, so the state preview will be switched to the default, then it turns out a sort of a flickering issue. @T2969
This commit is contained in:
parent
175a4355bf
commit
9ddf6e49c3
|
@ -160,9 +160,9 @@ cur_state_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
int value_len = 0;
|
||||
double value_convert = 0.0;
|
||||
|
||||
td->part_name = NULL;
|
||||
td->group_name = NULL;
|
||||
td->state_name = NULL;
|
||||
td->part_name = NULL;
|
||||
td->group_name = NULL;
|
||||
td->state_name = NULL;
|
||||
|
||||
while (p && p <= end)
|
||||
{
|
||||
|
@ -381,8 +381,11 @@ static void
|
|||
cur_name_thread_end(void *data, Ecore_Thread *thread EINA_UNUSED)
|
||||
{
|
||||
cur_name_td *td = data;
|
||||
td->cb(td->cb_data,td->state_name, td->state_value, td->part_name, td->group_name);
|
||||
td->cb(td->cb_data, td->state_name, td->state_value, td->part_name, td->group_name);
|
||||
td->pd->cntd = NULL;
|
||||
eina_stringshare_del(td->state_name);
|
||||
eina_stringshare_del(td->part_name);
|
||||
eina_stringshare_del(td->group_name);
|
||||
free(td);
|
||||
}
|
||||
|
||||
|
@ -391,6 +394,9 @@ cur_name_thread_cancel(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
{
|
||||
cur_name_td *td = data;
|
||||
if (td->pd) td->pd->cntd = NULL;
|
||||
eina_stringshare_del(td->state_name);
|
||||
eina_stringshare_del(td->part_name);
|
||||
eina_stringshare_del(td->group_name);
|
||||
free(td->utf8);
|
||||
free(td);
|
||||
}
|
||||
|
|
|
@ -39,6 +39,13 @@ struct viewer_s
|
|||
/* view size configured by application */
|
||||
Evas_Coord_Size view_config_size;
|
||||
|
||||
//Keep the part info which state has been changed
|
||||
struct {
|
||||
Eina_Stringshare *part;
|
||||
Eina_Stringshare *desc;
|
||||
double state;
|
||||
} changed_part;
|
||||
|
||||
Eina_Bool edj_reload_need : 1;
|
||||
};
|
||||
|
||||
|
@ -189,7 +196,8 @@ part_obj_geom_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
|
|||
}
|
||||
|
||||
Evas_Coord x, y, w , h;
|
||||
if (edje_edit_part_type_get(vd->layout, vd->part_name) == EDJE_PART_TYPE_SPACER)
|
||||
if (edje_edit_part_type_get(vd->layout, vd->part_name) ==
|
||||
EDJE_PART_TYPE_SPACER)
|
||||
{
|
||||
Evas_Object *scroller_edje = elm_layout_edje_get(vd->scroller);
|
||||
// Clipper need, to clip the highlight object for the part SPACER,
|
||||
|
@ -346,6 +354,10 @@ exe_del_event_cb(void *data, int type EINA_UNUSED, void *event EINA_UNUSED)
|
|||
view_obj_min_update(vd);
|
||||
view_part_highlight_set(vd, vd->part_name);
|
||||
dummy_obj_update(vd->layout);
|
||||
if (vd->changed_part.part)
|
||||
edje_edit_part_selected_state_set(vd->layout, vd->changed_part.part,
|
||||
vd->changed_part.desc,
|
||||
vd->changed_part.state);
|
||||
|
||||
view_obj_parts_callbacks_set(vd);
|
||||
vd->edj_reload_need = EINA_FALSE;
|
||||
|
@ -542,6 +554,8 @@ view_term(view_data *vd)
|
|||
|
||||
eina_stringshare_del(vd->group_name);
|
||||
eina_stringshare_del(vd->part_name);
|
||||
eina_stringshare_del(vd->changed_part.part);
|
||||
eina_stringshare_del(vd->changed_part.desc);
|
||||
|
||||
if (vd->part_obj)
|
||||
evas_object_event_callback_del(vd->part_obj, EVAS_CALLBACK_DEL,
|
||||
|
@ -753,8 +767,23 @@ view_string_list_free(Eina_List *list)
|
|||
}
|
||||
|
||||
void
|
||||
view_part_state_set(view_data *vd, const char *part, const char *description, const double state)
|
||||
view_part_state_set(view_data *vd, Eina_Stringshare *part,
|
||||
Eina_Stringshare *desc, double state)
|
||||
{
|
||||
if (!vd) return;
|
||||
edje_edit_part_selected_state_set(vd->layout, part, description, state);
|
||||
if (!part && !vd->changed_part.part) return;
|
||||
|
||||
//reset previous part?
|
||||
if (part != vd->changed_part.part)
|
||||
{
|
||||
view_part_state_set(vd, vd->changed_part.part, "default", 0.0);
|
||||
eina_stringshare_del(vd->changed_part.part);
|
||||
eina_stringshare_del(vd->changed_part.desc);
|
||||
}
|
||||
|
||||
edje_edit_part_selected_state_set(vd->layout, part, desc, state);
|
||||
vd->changed_part.part = eina_stringshare_add(part);
|
||||
vd->changed_part.desc = eina_stringshare_add(desc);
|
||||
vd->changed_part.state = state;
|
||||
}
|
||||
|
||||
|
|
|
@ -84,7 +84,6 @@ edit_view_sync_cb(void *data, Eina_Stringshare *state_name, double state_value,
|
|||
Eina_Stringshare *part_name, Eina_Stringshare *group_name)
|
||||
{
|
||||
Enventor_Object_Data *pd = data;
|
||||
static Eina_Stringshare *prev_part_name = NULL;
|
||||
|
||||
edj_mgr_all_views_reload();
|
||||
|
||||
|
@ -107,23 +106,14 @@ edit_view_sync_cb(void *data, Eina_Stringshare *state_name, double state_value,
|
|||
else
|
||||
view_part_highlight_set(VIEW_DATA, NULL);
|
||||
|
||||
//reset previous part's state
|
||||
if (!state_name)
|
||||
{
|
||||
view_part_state_set(VIEW_DATA, prev_part_name, "default", 0.0);
|
||||
eina_stringshare_del(prev_part_name);
|
||||
prev_part_name = NULL;
|
||||
view_part_state_set(VIEW_DATA, NULL, NULL, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((part_name) && (part_name != prev_part_name))
|
||||
{
|
||||
view_part_state_set(VIEW_DATA, prev_part_name, "default", 0.0);
|
||||
eina_stringshare_del(prev_part_name);
|
||||
prev_part_name = NULL;
|
||||
}
|
||||
|
||||
view_part_state_set(VIEW_DATA, part_name, state_name, state_value);
|
||||
prev_part_name = part_name;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Reference in New Issue