* edje: Add more focus event in edje. A start for a focus layout work.
SVN revision: 46389
This commit is contained in:
parent
7fcbff0e0e
commit
51de26862a
|
@ -6520,6 +6520,7 @@ st_collections_group_programs_program_action(void)
|
|||
"SCRIPT", EDJE_ACTION_TYPE_SCRIPT,
|
||||
"LUA_SCRIPT", EDJE_ACTION_TYPE_LUA_SCRIPT,
|
||||
"FOCUS_SET", EDJE_ACTION_TYPE_FOCUS_SET,
|
||||
"FOCUS_OBJECT", EDJE_ACTION_TYPE_FOCUS_OBJECT,
|
||||
NULL);
|
||||
if (ep->action == EDJE_ACTION_TYPE_STATE_SET)
|
||||
{
|
||||
|
@ -6546,7 +6547,7 @@ st_collections_group_programs_program_action(void)
|
|||
ep->value = parse_float(1);
|
||||
ep->value2 = parse_float(2);
|
||||
}
|
||||
|
||||
|
||||
switch (ep->action)
|
||||
{
|
||||
case EDJE_ACTION_TYPE_ACTION_STOP:
|
||||
|
@ -6560,6 +6561,7 @@ st_collections_group_programs_program_action(void)
|
|||
/* this is implicitly set by lua_script {} so this is here just for
|
||||
* completeness */
|
||||
break;
|
||||
case EDJE_ACTION_TYPE_FOCUS_OBJECT:
|
||||
case EDJE_ACTION_TYPE_FOCUS_SET:
|
||||
check_arg_count(1);
|
||||
break;
|
||||
|
|
|
@ -125,7 +125,8 @@ typedef enum _Edje_Action_Type
|
|||
EDJE_ACTION_TYPE_SCRIPT = 7,
|
||||
EDJE_ACTION_TYPE_FOCUS_SET = 8,
|
||||
EDJE_ACTION_TYPE_LUA_SCRIPT = 9,
|
||||
EDJE_ACTION_TYPE_LAST = 10
|
||||
EDJE_ACTION_TYPE_FOCUS_OBJECT = 10,
|
||||
EDJE_ACTION_TYPE_LAST = 11
|
||||
} Edje_Action_Type;
|
||||
|
||||
typedef enum _Edje_Tween_Mode
|
||||
|
|
|
@ -23,6 +23,38 @@ _edje_hold_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
|||
e = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
_edje_focus_in_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
||||
{
|
||||
Edje *ed;
|
||||
Edje_Real_Part *rp;
|
||||
|
||||
ed = data;
|
||||
rp = evas_object_data_get(obj, "real_part");
|
||||
if ((!rp) || (!ed))
|
||||
return;
|
||||
|
||||
_edje_emit(ed, "focus,part,in", rp->part->name);
|
||||
return;
|
||||
e = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
_edje_focus_out_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
||||
{
|
||||
Edje *ed;
|
||||
Edje_Real_Part *rp;
|
||||
|
||||
ed = data;
|
||||
rp = evas_object_data_get(obj, "real_part");
|
||||
if ((!rp) || (!ed))
|
||||
return;
|
||||
|
||||
_edje_emit(ed, "focus,part,out", rp->part->name);
|
||||
return;
|
||||
e = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
_edje_mouse_in_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
||||
{
|
||||
|
@ -466,28 +498,62 @@ _edje_callbacks_add(Evas_Object *obj, Edje *ed, Edje_Real_Part *rp)
|
|||
}
|
||||
|
||||
void
|
||||
_edje_callbacks_del(Evas_Object *obj)
|
||||
_edje_callbacks_del(Evas_Object *obj, Edje *ed)
|
||||
{
|
||||
evas_object_event_callback_del(obj,
|
||||
EVAS_CALLBACK_HOLD,
|
||||
_edje_hold_cb);
|
||||
evas_object_event_callback_del(obj,
|
||||
EVAS_CALLBACK_MOUSE_IN,
|
||||
_edje_mouse_in_cb);
|
||||
evas_object_event_callback_del(obj,
|
||||
EVAS_CALLBACK_MOUSE_OUT,
|
||||
_edje_mouse_out_cb);
|
||||
evas_object_event_callback_del(obj,
|
||||
EVAS_CALLBACK_MOUSE_DOWN,
|
||||
_edje_mouse_down_cb);
|
||||
evas_object_event_callback_del(obj,
|
||||
EVAS_CALLBACK_MOUSE_UP,
|
||||
_edje_mouse_up_cb);
|
||||
evas_object_event_callback_del(obj,
|
||||
EVAS_CALLBACK_MOUSE_MOVE,
|
||||
_edje_mouse_move_cb);
|
||||
evas_object_event_callback_del(obj,
|
||||
EVAS_CALLBACK_MOUSE_WHEEL,
|
||||
_edje_mouse_wheel_cb);
|
||||
evas_object_event_callback_del_full(obj,
|
||||
EVAS_CALLBACK_HOLD,
|
||||
_edje_hold_cb,
|
||||
ed);
|
||||
evas_object_event_callback_del_full(obj,
|
||||
EVAS_CALLBACK_MOUSE_IN,
|
||||
_edje_mouse_in_cb,
|
||||
ed);
|
||||
evas_object_event_callback_del_full(obj,
|
||||
EVAS_CALLBACK_MOUSE_OUT,
|
||||
_edje_mouse_out_cb,
|
||||
ed);
|
||||
evas_object_event_callback_del_full(obj,
|
||||
EVAS_CALLBACK_MOUSE_DOWN,
|
||||
_edje_mouse_down_cb,
|
||||
ed);
|
||||
evas_object_event_callback_del_full(obj,
|
||||
EVAS_CALLBACK_MOUSE_UP,
|
||||
_edje_mouse_up_cb,
|
||||
ed);
|
||||
evas_object_event_callback_del_full(obj,
|
||||
EVAS_CALLBACK_MOUSE_MOVE,
|
||||
_edje_mouse_move_cb,
|
||||
ed);
|
||||
evas_object_event_callback_del_full(obj,
|
||||
EVAS_CALLBACK_MOUSE_WHEEL,
|
||||
_edje_mouse_wheel_cb,
|
||||
ed);
|
||||
evas_object_data_del(obj, "real_part");
|
||||
}
|
||||
|
||||
void
|
||||
_edje_callbacks_focus_add(Evas_Object *obj, Edje *ed, Edje_Real_Part *rp)
|
||||
{
|
||||
evas_object_event_callback_add(obj,
|
||||
EVAS_CALLBACK_FOCUS_IN,
|
||||
_edje_focus_in_cb,
|
||||
ed);
|
||||
evas_object_event_callback_add(obj,
|
||||
EVAS_CALLBACK_FOCUS_OUT,
|
||||
_edje_focus_out_cb,
|
||||
ed);
|
||||
evas_object_data_set(obj, "real_part", rp);
|
||||
}
|
||||
|
||||
void
|
||||
_edje_callbacks_focus_del(Evas_Object *obj, Edje *ed)
|
||||
{
|
||||
evas_object_event_callback_del_full(obj,
|
||||
EVAS_CALLBACK_FOCUS_IN,
|
||||
_edje_focus_in_cb,
|
||||
ed);
|
||||
evas_object_event_callback_del_full(obj,
|
||||
EVAS_CALLBACK_FOCUS_OUT,
|
||||
_edje_focus_out_cb,
|
||||
ed);
|
||||
}
|
||||
|
|
|
@ -172,7 +172,7 @@ _edje_real_part_free(Edje_Real_Part *rp)
|
|||
|
||||
if (rp->object)
|
||||
{
|
||||
_edje_callbacks_del(rp->object);
|
||||
_edje_callbacks_del(rp->object, rp->edje);
|
||||
evas_object_del(rp->object);
|
||||
}
|
||||
|
||||
|
@ -185,7 +185,7 @@ _edje_real_part_free(Edje_Real_Part *rp)
|
|||
evas_object_clip_unset(rp->swallowed_object);
|
||||
evas_object_data_del(rp->swallowed_object, "\377 edje.swallowing_part");
|
||||
if (rp->part->mouse_events)
|
||||
_edje_callbacks_del(rp->swallowed_object);
|
||||
_edje_callbacks_del(rp->swallowed_object, rp->edje);
|
||||
|
||||
if (rp->part->type == EDJE_PART_TYPE_GROUP ||
|
||||
rp->part->type == EDJE_PART_TYPE_EXTERNAL)
|
||||
|
@ -2148,7 +2148,7 @@ edje_edit_part_mouse_events_set(Evas_Object *obj, const char *part, Eina_Bool mo
|
|||
else
|
||||
{
|
||||
evas_object_pass_events_set(rp->object, 1);
|
||||
_edje_callbacks_del(rp->object);
|
||||
_edje_callbacks_del(rp->object, ed);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -414,6 +414,7 @@ _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *g
|
|||
evas_object_color_set(rp->object, 0, 0, 0, 0);
|
||||
evas_object_pass_events_set(rp->object, 1);
|
||||
evas_object_pointer_mode_set(rp->object, EVAS_OBJECT_POINTER_MODE_NOGRAB);
|
||||
_edje_callbacks_focus_add(rp->object, ed, rp);
|
||||
break;
|
||||
case EDJE_PART_TYPE_TEXTBLOCK:
|
||||
rp->object = evas_object_textblock_add(ed->evas);
|
||||
|
@ -680,7 +681,7 @@ _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *g
|
|||
|
||||
group_path = eina_list_remove(group_path, group_path_entry);
|
||||
eina_stringshare_del(group_path_entry);
|
||||
|
||||
|
||||
edje_object_signal_callback_add(child_obj, "*", "*", _cb_signal_repeat, obj);
|
||||
if (rp->part->type == EDJE_PART_TYPE_GROUP)
|
||||
{
|
||||
|
@ -852,7 +853,8 @@ _edje_file_del(Edje *ed)
|
|||
_edje_entry_real_part_shutdown(rp);
|
||||
if (rp->object)
|
||||
{
|
||||
_edje_callbacks_del(rp->object);
|
||||
_edje_callbacks_del(rp->object, ed);
|
||||
_edje_callbacks_focus_del(rp->object, ed);
|
||||
evas_object_del(rp->object);
|
||||
}
|
||||
if (rp->swallowed_object)
|
||||
|
|
|
@ -1229,7 +1229,9 @@ void _edje_mouse_wheel_cb(void *data, Evas * e, Evas_Object * obj, void *event_
|
|||
int _edje_timer_cb(void *data);
|
||||
int _edje_pending_timer_cb(void *data);
|
||||
void _edje_callbacks_add(Evas_Object *obj, Edje *ed, Edje_Real_Part *rp);
|
||||
void _edje_callbacks_del(Evas_Object *obj);
|
||||
void _edje_callbacks_focus_add(Evas_Object *obj, Edje *ed, Edje_Real_Part *rp);
|
||||
void _edje_callbacks_del(Evas_Object *obj, Edje *ed);
|
||||
void _edje_callbacks_focus_del(Evas_Object *obj, Edje *ed);
|
||||
|
||||
void _edje_edd_init(void);
|
||||
void _edje_edd_shutdown(void);
|
||||
|
|
|
@ -882,7 +882,7 @@ _edje_program_run(Edje *ed, Edje_Program *pr, int force, const char *ssig, const
|
|||
}
|
||||
else
|
||||
{
|
||||
EINA_LIST_FOREACH(pr->targets, l, pt)
|
||||
EINA_LIST_FOREACH(pr->targets, l, pt)
|
||||
{
|
||||
if (pt->id >= 0)
|
||||
{
|
||||
|
@ -903,6 +903,44 @@ _edje_program_run(Edje *ed, Edje_Program *pr, int force, const char *ssig, const
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (pr->action == EDJE_ACTION_TYPE_FOCUS_OBJECT)
|
||||
{
|
||||
if (!pr->targets)
|
||||
{
|
||||
Evas_Object *focused;
|
||||
|
||||
focused = evas_focus_get(evas_object_evas_get(ed->obj));
|
||||
if (focused)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* Check if the current swallowed object is one of my child. */
|
||||
for (i = 0; i < ed->table_parts_size; ++i)
|
||||
{
|
||||
rp = ed->table_parts[i];
|
||||
if (rp && rp->swallowed_object == focused)
|
||||
{
|
||||
evas_object_focus_set(focused, EINA_FALSE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EINA_LIST_FOREACH(pr->targets, l, pt)
|
||||
{
|
||||
if (pt->id >= 0)
|
||||
{
|
||||
rp = ed->table_parts[pt->id % ed->table_parts_size];
|
||||
if (rp && rp->swallowed_object)
|
||||
{
|
||||
evas_object_focus_set(rp->swallowed_object, EINA_TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// _edje_emit(ed, "program,start", pr->name);
|
||||
|
|
|
@ -2406,7 +2406,8 @@ edje_object_part_unswallow(Evas_Object *obj __UNUSED__, Evas_Object *obj_swallow
|
|||
evas_object_data_del(rp->swallowed_object, "\377 edje.swallowing_part");
|
||||
|
||||
if (rp->part->mouse_events)
|
||||
_edje_callbacks_del(rp->swallowed_object);
|
||||
_edje_callbacks_del(rp->swallowed_object, rp->edje);
|
||||
_edje_callbacks_focus_del(rp->swallowed_object, rp->edje);
|
||||
|
||||
rp->swallowed_object = NULL;
|
||||
rp->swallow_params.min.w = 0;
|
||||
|
@ -4453,6 +4454,7 @@ _edje_real_part_swallow(Edje_Real_Part *rp, Evas_Object *obj_swallow)
|
|||
}
|
||||
else
|
||||
evas_object_pass_events_set(obj_swallow, 1);
|
||||
_edje_callbacks_focus_add(rp->swallowed_object, rp->edje, rp);
|
||||
|
||||
if (rp->part->precise_is_inside)
|
||||
evas_object_precise_is_inside_set(obj_swallow, 1);
|
||||
|
@ -4476,7 +4478,8 @@ _edje_real_part_swallow_clear(Edje_Real_Part *rp)
|
|||
evas_object_clip_unset(rp->swallowed_object);
|
||||
evas_object_data_del(rp->swallowed_object, "\377 edje.swallowing_part");
|
||||
if (rp->part->mouse_events)
|
||||
_edje_callbacks_del(rp->swallowed_object);
|
||||
_edje_callbacks_del(rp->swallowed_object, rp->edje);
|
||||
_edje_callbacks_focus_del(rp->swallowed_object, rp->edje);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Reference in New Issue