ecore-evas/buffer: implement ignore_events method

Summary:
this is a simple implementation of ignore_events functionality which
sets pass_events if it's an image or prevents the emission of events
in other cases

the result should be that no user events are received. this deliberately
does not block the triggering of resize callbacks as in the original ticket
since this guarantees broken functionality and is just not a good idea

fix T4700

Reviewers: devilhorns, Hermet

Reviewed By: Hermet

Subscribers: Hermet, cedric, #reviewers, #committers

Tags: #efl_display_system

Maniphest Tasks: T4700

Differential Revision: https://phab.enlightenment.org/D6876
This commit is contained in:
Mike Blumenkrantz 2018-08-22 18:35:10 +09:00 committed by Hermet Park
parent e3b6f5a959
commit ba3fe6c1cb
1 changed files with 23 additions and 2 deletions

View File

@ -110,6 +110,17 @@ _ecore_evas_move_resize(Ecore_Evas *ee, int x EINA_UNUSED, int y EINA_UNUSED, in
_ecore_evas_resize(ee, w, h);
}
static void
_ecore_evas_buffer_ignore_events_set(Ecore_Evas *ee, int val)
{
Ecore_Evas_Engine_Buffer_Data *bdata = ee->engine.data;
if (ee->ignore_events == val) return;
ee->ignore_events = val;
if (bdata->image)
evas_object_pass_events_set(bdata->image, val);
}
static void
_ecore_evas_show(Ecore_Evas *ee)
{
@ -272,6 +283,7 @@ _ecore_evas_buffer_cb_mouse_in(void *data, Evas *e, Evas_Object *obj EINA_UNUSED
ee = data;
ev = event_info;
if (!ee->evas) return;
if (ee->ignore_events) return;
_ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
evas_event_feed_mouse_in(ee->evas, ev->timestamp, NULL);
}
@ -285,6 +297,7 @@ _ecore_evas_buffer_cb_mouse_out(void *data, Evas *e, Evas_Object *obj EINA_UNUSE
ee = data;
ev = event_info;
if (!ee->evas) return;
if (ee->ignore_events) return;
_ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
evas_event_feed_mouse_out(ee->evas, ev->timestamp, NULL);
}
@ -298,6 +311,7 @@ _ecore_evas_buffer_cb_mouse_down(void *data, Evas *e, Evas_Object *obj EINA_UNUS
ee = data;
ev = event_info;
if (!ee->evas) return;
if (ee->ignore_events) return;
_ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
evas_event_feed_mouse_down(ee->evas, ev->button, ev->flags, ev->timestamp, NULL);
}
@ -311,6 +325,7 @@ _ecore_evas_buffer_cb_mouse_up(void *data, Evas *e, Evas_Object *obj EINA_UNUSED
ee = data;
ev = event_info;
if (!ee->evas) return;
if (ee->ignore_events) return;
_ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
evas_event_feed_mouse_up(ee->evas, ev->button, ev->flags, ev->timestamp, NULL);
}
@ -341,6 +356,7 @@ _ecore_evas_buffer_cb_mouse_wheel(void *data, Evas *e, Evas_Object *obj EINA_UNU
ee = data;
ev = event_info;
if (!ee->evas) return;
if (ee->ignore_events) return;
_ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
evas_event_feed_mouse_wheel(ee->evas, ev->direction, ev->z, ev->timestamp, NULL);
}
@ -360,6 +376,7 @@ _ecore_evas_buffer_cb_multi_down(void *data, Evas *e, Evas_Object *obj EINA_UNUS
xx = x;
yy = y;
if (!ee->evas) return;
if (ee->ignore_events) return;
_ecore_evas_buffer_coord_translate(ee, &x, &y);
xf = (ev->canvas.xsub - (double)xx) + (double)x;
yf = (ev->canvas.ysub - (double)yy) + (double)y;
@ -382,6 +399,7 @@ _ecore_evas_buffer_cb_multi_up(void *data, Evas *e, Evas_Object *obj EINA_UNUSED
xx = x;
yy = y;
if (!ee->evas) return;
if (ee->ignore_events) return;
_ecore_evas_buffer_coord_translate(ee, &x, &y);
xf = (ev->canvas.xsub - (double)xx) + (double)x;
yf = (ev->canvas.ysub - (double)yy) + (double)y;
@ -404,6 +422,7 @@ _ecore_evas_buffer_cb_multi_move(void *data, Evas *e, Evas_Object *obj EINA_UNUS
xx = x;
yy = y;
if (!ee->evas) return;
if (ee->ignore_events) return;
_ecore_evas_buffer_coord_translate(ee, &x, &y);
xf = (ev->cur.canvas.xsub - (double)xx) + (double)x;
yf = (ev->cur.canvas.ysub - (double)yy) + (double)y;
@ -429,6 +448,7 @@ _ecore_evas_buffer_cb_key_down(void *data, Evas *e, Evas_Object *obj EINA_UNUSED
ee = data;
ev = event_info;
if (!ee->evas) return;
if (ee->ignore_events) return;
_ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
evas_event_feed_key_down(ee->evas, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, NULL);
}
@ -442,6 +462,7 @@ _ecore_evas_buffer_cb_key_up(void *data, Evas *e, Evas_Object *obj EINA_UNUSED,
ee = data;
ev = event_info;
if (!ee->evas) return;
if (ee->ignore_events) return;
_ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
evas_event_feed_key_up(ee->evas, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, NULL);
}
@ -589,7 +610,7 @@ _ecore_evas_buffer_pointer_warp(const Ecore_Evas *ee, Evas_Coord x, Evas_Coord y
if (bdata->image)
_ecore_evas_mouse_move_process((Ecore_Evas*)ee, x, y, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff));
else
else if (!ee->ignore_events)
{
Ecore_Event_Mouse_Move *ev;
@ -683,7 +704,7 @@ static Ecore_Evas_Engine_Func _ecore_buffer_engine_func =
NULL,
NULL,
NULL,
NULL,
_ecore_evas_buffer_ignore_events_set,
_ecore_evas_buffer_alpha_set,
NULL, //transparent
NULL, // profiles_set