forked from enlightenment/efl
edje: accept optional seat parameter on FOCUS_OBJECT
If not provided, FOCUS_OBJECT action will keep acting over default seat. Also include a usage on edje-multiseat test (actually no example was exercising this action).
This commit is contained in:
parent
7ef5f6c3a0
commit
0ab6567b3e
|
@ -14094,7 +14094,7 @@ st_collections_group_programs_program_in(void)
|
|||
@li DRAG_VAL_STEP 1.0 0.0
|
||||
@li DRAG_VAL_PAGE 0.0 0.0
|
||||
@li FOCUS_SET ("seat")
|
||||
@li FOCUS_OBJECT
|
||||
@li FOCUS_OBJECT ("seat")
|
||||
@li PARAM_COPY "src_part" "src_param" "dst_part" "dst_param"
|
||||
@li PARAM_SET "part" "param" "value"
|
||||
@li PLAY_SAMPLE "sample name" speed (channel)
|
||||
|
@ -14111,7 +14111,7 @@ st_collections_group_programs_program_in(void)
|
|||
@li PHYSICS_ROT_SET 0.707 0 0 0.707
|
||||
|
||||
Only one action can be specified per program.
|
||||
|
||||
|
||||
PLAY_SAMPLE (optional) channel can be one of:
|
||||
@li EFFECT/FX
|
||||
@li BACKGROUND/BG
|
||||
|
@ -14169,9 +14169,10 @@ st_collections_group_programs_program_action(void)
|
|||
else
|
||||
ep->value = parse_float_range(2, 0.0, 1.0);
|
||||
}
|
||||
else if (ep->action == EDJE_ACTION_TYPE_FOCUS_SET)
|
||||
else if ((ep->action == EDJE_ACTION_TYPE_FOCUS_SET) ||
|
||||
(ep->action == EDJE_ACTION_TYPE_FOCUS_OBJECT))
|
||||
{
|
||||
if (get_arg_count() == 1)
|
||||
if (get_arg_count() == 1)
|
||||
ep->seat = NULL;
|
||||
else
|
||||
ep->seat = parse_str(1);
|
||||
|
@ -14317,7 +14318,6 @@ st_collections_group_programs_program_action(void)
|
|||
* completeness */
|
||||
break;
|
||||
case EDJE_ACTION_TYPE_ACTION_STOP:
|
||||
case EDJE_ACTION_TYPE_FOCUS_OBJECT:
|
||||
case EDJE_ACTION_TYPE_PHYSICS_FORCES_CLEAR:
|
||||
case EDJE_ACTION_TYPE_PHYSICS_STOP:
|
||||
check_arg_count(1);
|
||||
|
@ -14342,6 +14342,7 @@ st_collections_group_programs_program_action(void)
|
|||
check_min_arg_count(2);
|
||||
break;
|
||||
case EDJE_ACTION_TYPE_FOCUS_SET:
|
||||
case EDJE_ACTION_TYPE_FOCUS_OBJECT:
|
||||
check_min_arg_count(1);
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -53,6 +53,52 @@ _on_canvas_resize(Ecore_Evas *ee)
|
|||
evas_object_resize(edje_obj, w, h);
|
||||
}
|
||||
|
||||
static void
|
||||
_on_rect_focus_in(void *data, const Efl_Event *event)
|
||||
{
|
||||
Evas_Object *rect, *edje_obj;
|
||||
Efl_Input_Device *seat;
|
||||
Eina_Stringshare *name;
|
||||
Efl_Input_Focus *ev;
|
||||
|
||||
edje_obj = data;
|
||||
rect = event->object;
|
||||
ev = event->info;
|
||||
seat = efl_input_device_get(ev);
|
||||
name = edje_obj_seat_name_get(edje_obj, seat);
|
||||
|
||||
printf("Seat %s (%s) focused the rect object\n",
|
||||
efl_input_device_name_get(seat), name);
|
||||
|
||||
if (!strcmp(name, "seat1"))
|
||||
evas_object_color_set(rect, 200, 0, 0, 255);
|
||||
else if (!strcmp(name, "seat2"))
|
||||
evas_object_color_set(rect, 0, 200, 0, 255);
|
||||
else
|
||||
printf("Unexpected seat %s - no color change\n", name);
|
||||
}
|
||||
|
||||
static void
|
||||
_on_rect_focus_out(void *data, const Efl_Event *event)
|
||||
{
|
||||
Evas_Object *rect, *edje_obj;
|
||||
Efl_Input_Device *seat;
|
||||
Eina_Stringshare *name;
|
||||
Efl_Input_Focus *ev;
|
||||
|
||||
edje_obj = data;
|
||||
rect = event->object;
|
||||
ev = event->info;
|
||||
seat = efl_input_device_get(ev);
|
||||
name = edje_obj_seat_name_get(edje_obj, seat);
|
||||
|
||||
printf("Seat %s (%s) unfocused the rect object\n",
|
||||
efl_input_device_name_get(seat), name);
|
||||
evas_object_color_set(rect, 200, 200, 200, 255);
|
||||
|
||||
efl_canvas_object_seat_focus_add(edje_obj, seat);
|
||||
}
|
||||
|
||||
static void
|
||||
_on_key_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *o, void *event_info)
|
||||
{
|
||||
|
@ -127,7 +173,7 @@ main(int argc EINA_UNUSED, char *argv[] EINA_UNUSED)
|
|||
{
|
||||
const char *edje_file = PACKAGE_DATA_DIR"/multiseat.edj";
|
||||
const Eina_List *devices, *l;
|
||||
Evas_Object *edje_obj, *bg;
|
||||
Evas_Object *edje_obj, *bg, *rect;
|
||||
Efl_Input_Device *dev;
|
||||
Ecore_Evas *ee;
|
||||
Evas *evas;
|
||||
|
@ -174,6 +220,14 @@ main(int argc EINA_UNUSED, char *argv[] EINA_UNUSED)
|
|||
edje_object_part_text_cursor_end_set(edje_obj, "example/text2",
|
||||
EDJE_CURSOR_MAIN);
|
||||
|
||||
rect = evas_object_rectangle_add(evas);
|
||||
evas_object_color_set(rect, 200, 200, 200, 255);
|
||||
edje_object_part_swallow(edje_obj, "example/swallow", rect);
|
||||
efl_event_callback_add(rect, EFL_EVENT_FOCUS_IN,
|
||||
_on_rect_focus_in, edje_obj);
|
||||
efl_event_callback_add(rect, EFL_EVENT_FOCUS_OUT,
|
||||
_on_rect_focus_out, edje_obj);
|
||||
|
||||
devices = evas_device_list(evas, NULL);
|
||||
EINA_LIST_FOREACH(devices, l, dev)
|
||||
{
|
||||
|
|
|
@ -247,7 +247,7 @@ collections {
|
|||
mouse_events: 1;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
rel1.relative: 0.3 0.65;
|
||||
rel1.relative: 0.45 0.65;
|
||||
rel2.relative: 0.9 0.9;
|
||||
color: 200 200 200 255;
|
||||
}
|
||||
|
@ -305,7 +305,7 @@ collections {
|
|||
rel2.to: "button_left_over";
|
||||
text {
|
||||
text: "Seat 1 over";
|
||||
size: 12;
|
||||
size: 10;
|
||||
font: "sans";
|
||||
min: 1 1;
|
||||
}
|
||||
|
@ -346,7 +346,7 @@ collections {
|
|||
rel2.to: "button_left_focus";
|
||||
text {
|
||||
text: "Seat 1 focus";
|
||||
size: 12;
|
||||
size: 10;
|
||||
font: "sans";
|
||||
min: 1 1;
|
||||
}
|
||||
|
@ -387,7 +387,7 @@ collections {
|
|||
rel2.to: "button_right_over";
|
||||
text {
|
||||
text: "Seat 2 over";
|
||||
size: 12;
|
||||
size: 10;
|
||||
font: "sans";
|
||||
min: 1 1;
|
||||
}
|
||||
|
@ -428,12 +428,34 @@ collections {
|
|||
rel2.to: "button_right_focus";
|
||||
text {
|
||||
text: "Seat 2 focus";
|
||||
size: 12;
|
||||
size: 10;
|
||||
font: "sans";
|
||||
min: 1 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
part {
|
||||
name: "unfocus_area";
|
||||
type: RECT;
|
||||
mouse_events: 1;
|
||||
repeat_events: 1;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
color: 255 255 255 0;
|
||||
}
|
||||
}
|
||||
|
||||
part {
|
||||
name: "example/swallow";
|
||||
type: SWALLOW;
|
||||
mouse_events: 1;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
rel1.relative: 0.3 0.65;
|
||||
rel2.relative: 0.4 0.9;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
programs {
|
||||
|
@ -668,6 +690,36 @@ collections {
|
|||
action: STATE_SET "default" 0.0;
|
||||
target: "example/knob2";
|
||||
}
|
||||
|
||||
program {
|
||||
name: "rect,focus,s1";
|
||||
signal: "mouse,clicked,1,seat1";
|
||||
source: "example/swallow";
|
||||
action: FOCUS_OBJECT "seat1";
|
||||
target: "example/swallow";
|
||||
}
|
||||
|
||||
program {
|
||||
name: "rect,unfocus,s1";
|
||||
signal: "mouse,clicked,1,seat1";
|
||||
source: "unfocus_area";
|
||||
action: FOCUS_OBJECT "seat1";
|
||||
}
|
||||
|
||||
program {
|
||||
name: "rect,focus,s2";
|
||||
signal: "mouse,clicked,1,seat2";
|
||||
source: "example/swallow";
|
||||
action: FOCUS_OBJECT "seat2";
|
||||
target: "example/swallow";
|
||||
}
|
||||
|
||||
program {
|
||||
name: "rect,unfocus,s2";
|
||||
signal: "mouse,clicked,1,seat2";
|
||||
source: "unfocus_area";
|
||||
action: FOCUS_OBJECT "seat2";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1032,11 +1032,29 @@ low_mem_current:
|
|||
break;
|
||||
|
||||
case EDJE_ACTION_TYPE_FOCUS_OBJECT:
|
||||
{
|
||||
Efl_Input_Device *seat = NULL;
|
||||
|
||||
if (pr->seat)
|
||||
{
|
||||
Eina_Stringshare *seat_name;
|
||||
|
||||
seat_name = eina_stringshare_add(pr->seat);
|
||||
seat = _edje_seat_get(ed, seat_name);
|
||||
eina_stringshare_del(seat_name);
|
||||
}
|
||||
if (!seat)
|
||||
{
|
||||
Evas *e;
|
||||
|
||||
e = evas_object_evas_get(ed->obj);
|
||||
seat = evas_canvas_default_device_get(e, EFL_INPUT_DEVICE_CLASS_SEAT);
|
||||
}
|
||||
if (!pr->targets)
|
||||
{
|
||||
Evas_Object *focused;
|
||||
|
||||
focused = evas_focus_get(evas_object_evas_get(ed->obj));
|
||||
focused = evas_seat_focus_get(evas_object_evas_get(ed->obj), seat);
|
||||
if (focused)
|
||||
{
|
||||
unsigned int i;
|
||||
|
@ -1050,7 +1068,7 @@ low_mem_current:
|
|||
(rp->typedata.swallow)) &&
|
||||
(rp->typedata.swallow->swallowed_object == focused))
|
||||
{
|
||||
evas_object_focus_set(focused, EINA_FALSE);
|
||||
evas_object_seat_focus_del(focused, seat);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1067,11 +1085,13 @@ low_mem_current:
|
|||
((rp->type == EDJE_RP_TYPE_SWALLOW) &&
|
||||
(rp->typedata.swallow)) &&
|
||||
(rp->typedata.swallow->swallowed_object))
|
||||
evas_object_focus_set(rp->typedata.swallow->swallowed_object, EINA_TRUE);
|
||||
evas_object_seat_focus_add(
|
||||
rp->typedata.swallow->swallowed_object, seat);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case EDJE_ACTION_TYPE_SOUND_SAMPLE:
|
||||
if (_edje_block_break(ed))
|
||||
|
|
Loading…
Reference in New Issue