From 4c431c8b9ccf9b5916ff7f21a1ec2399e09b3979 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 9 Jun 2017 20:16:08 -0400 Subject: [PATCH] edje: add set_pointer_mode() to embryo functions this should probably be a description-level property --- data/edje/include/edje.inc | 1 + src/lib/edje/edje_embryo.c | 31 +++++++++++++++++++++++++++++++ src/lib/edje/edje_private.h | 2 ++ src/lib/edje/edje_util.c | 10 ++++++++++ 4 files changed, 44 insertions(+) diff --git a/data/edje/include/edje.inc b/data/edje/include/edje.inc index 5fa08bf..bc60a83 100644 --- a/data/edje/include/edje.inc +++ b/data/edje/include/edje.inc @@ -133,6 +133,7 @@ native set_min_size (Float:w, Float:h); native set_max_size (Float:w, Float:h); native set_mouse_events (part_id, ev); native get_mouse_events (part_id); +native set_pointer_mode(part_id, mode); native set_repeat_events(part_id, rep); native get_repeat_events(part_id); native set_ignore_flags (part_id, flags); diff --git a/src/lib/edje/edje_embryo.c b/src/lib/edje/edje_embryo.c index e6963b6..081fe0e 100644 --- a/src/lib/edje/edje_embryo.c +++ b/src/lib/edje/edje_embryo.c @@ -187,6 +187,14 @@ * //set_effect(part_id, Effect:fx) * set_mouse_events(part_id, ev) * get_mouse_events(part_id) + * + * Pointer_Mode { + * POINTER_MODE_AUTOGRAB = 0, + * POINTER_MODE_NOGRAB = 1, + * POINTER_MODE_NOGREP = 2, + * } + * + * set_pointer_mode(part_id, mode) * set_repeat_events(part_id, rep) * get_repeat_events(part_id) * set_ignore_flags(part_id, flags) @@ -3600,6 +3608,28 @@ _edje_embryo_fn_get_mouse_events(Embryo_Program *ep, Embryo_Cell *params) } +/* set_pointer_mode(part_id, mode) */ +static Embryo_Cell +_edje_embryo_fn_set_pointer_mode(Embryo_Program *ep, Embryo_Cell *params) +{ + int part_id = 0; + Edje *ed; + Edje_Real_Part *rp; + + CHKPARAM(2); + + part_id = params[1]; + if (part_id < 0) return 0; + + ed = embryo_program_data_get(ep); + rp = ed->table_parts[part_id % ed->table_parts_size]; + + if (rp) + _edje_real_part_pointer_mode_set(ed, rp, params[2]); + + return 0; +} + /* set_repeat_events(part_id, rep) */ static Embryo_Cell _edje_embryo_fn_set_repeat_events(Embryo_Program *ep, Embryo_Cell *params) @@ -4557,6 +4587,7 @@ _edje_embryo_script_init(Edje_Part_Collection *edc) embryo_program_native_call_add(ep, "set_mouse_events", _edje_embryo_fn_set_mouse_events); embryo_program_native_call_add(ep, "get_mouse_events", _edje_embryo_fn_get_mouse_events); + embryo_program_native_call_add(ep, "set_pointer_mode", _edje_embryo_fn_set_pointer_mode); embryo_program_native_call_add(ep, "set_repeat_events", _edje_embryo_fn_set_repeat_events); embryo_program_native_call_add(ep, "get_repeat_events", _edje_embryo_fn_get_repeat_events); embryo_program_native_call_add(ep, "set_ignore_flags", _edje_embryo_fn_set_ignore_flags); diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h index 11d3055..8e51730 100644 --- a/src/lib/edje/edje_private.h +++ b/src/lib/edje/edje_private.h @@ -2028,6 +2028,7 @@ struct _Edje_Real_Part FLOAT_T description_pos; // 8 Edje_Rectangle req; // 16 int x, y, w, h; // 16 + Evas_Object_Pointer_Mode pointer_mode; #ifdef EDJE_CALC_CACHE unsigned short state; // 2 #endif @@ -3090,6 +3091,7 @@ Eina_Bool _edje_real_part_mouse_events_get(Edje *ed, Edje_Real_Part *rp); void _edje_real_part_mouse_events_set(Edje *ed, Edje_Real_Part *rp, Eina_Bool mouse_events); Eina_Bool _edje_real_part_repeat_events_get(Edje *ed, Edje_Real_Part *rp); void _edje_real_part_repeat_events_set(Edje *ed, Edje_Real_Part *rp, Eina_Bool repeat_events); +void _edje_real_part_pointer_mode_set(Edje *ed, Edje_Real_Part *rp, Evas_Object_Pointer_Mode mode); Evas_Event_Flags _edje_real_part_ignore_flags_get(Edje *ed, Edje_Real_Part *rp); void _edje_real_part_ignore_flags_set(Edje *ed, Edje_Real_Part *rp, Evas_Event_Flags ignore_flags); Evas_Event_Flags _edje_real_part_mask_flags_get(Edje *ed, Edje_Real_Part *rp); diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c index 2f09b3f..60ad977 100644 --- a/src/lib/edje/edje_util.c +++ b/src/lib/edje/edje_util.c @@ -6524,6 +6524,16 @@ _edje_real_part_repeat_events_set(Edje *ed EINA_UNUSED, Edje_Real_Part *rp, Eina evas_object_repeat_events_set(rp->object, 0); } +void +_edje_real_part_pointer_mode_set(Edje *ed EINA_UNUSED, Edje_Real_Part *rp, Evas_Object_Pointer_Mode mode) +{ + if (!rp) return; + + rp->pointer_mode = mode; + + evas_object_pointer_mode_set(rp->object, mode); +} + Evas_Event_Flags _edje_real_part_ignore_flags_get(Edje *ed EINA_UNUSED, Edje_Real_Part *rp) { -- 2.7.4