diff --git a/src/examples/ecore/ecore_evas_extn_plug_example.c b/src/examples/ecore/ecore_evas_extn_plug_example.c index e3d6e1cd4f..1a88e02a96 100644 --- a/src/examples/ecore/ecore_evas_extn_plug_example.c +++ b/src/examples/ecore/ecore_evas_extn_plug_example.c @@ -4,7 +4,7 @@ * For checking with ecore evas extn socket, please run with ecore_evas_extn_socket_example. * * @verbatim - * gcc -o ecore_evas_extn_plug_example ecore_evas_extn_plug_example.c `pkg-config --libs --cflags ecore-evas` + * gcc -o ecore_evas_extn_plug_example ecore_evas_extn_plug_example.c `pkg-config --libs --cflags evas ecore ecore-evas` * @endverbatim */ diff --git a/src/examples/ecore/ecore_evas_extn_socket_example.c b/src/examples/ecore/ecore_evas_extn_socket_example.c index e88adbaf2c..aff4975b88 100644 --- a/src/examples/ecore/ecore_evas_extn_socket_example.c +++ b/src/examples/ecore/ecore_evas_extn_socket_example.c @@ -6,7 +6,7 @@ * You can check functions of ecore extn socket if you use ecore extn plug together. * * @verbatim - * gcc -o ecore_evas_extn_socket_example ecore_evas_extn_socket_example.c `pkg-config --libs --cflags ecore-evas` + * gcc -o ecore_evas_extn_socket_example ecore_evas_extn_socket_example.c `pkg-config --libs --cflags evas ecore ecore-evas` * @endverbatim */ @@ -193,6 +193,8 @@ main(void) evas_object_show(sock_bg); ecore_evas_data_set(ee_socket, "bg", sock_bg); + ecore_evas_extn_socket_events_block_set(ee_socket, EINA_FALSE); + ecore_main_loop_begin(); ecore_evas_free(ee); diff --git a/src/lib/ecore_evas/Ecore_Evas.h b/src/lib/ecore_evas/Ecore_Evas.h index 22ebe6fbd0..1a035ab1fa 100644 --- a/src/lib/ecore_evas/Ecore_Evas.h +++ b/src/lib/ecore_evas/Ecore_Evas.h @@ -2650,6 +2650,31 @@ EAPI Ecore_Evas *ecore_evas_extn_socket_new(int w, int h); */ EAPI Eina_Bool ecore_evas_extn_socket_listen(Ecore_Evas *ee, const char *svcname, int svcnum, Eina_Bool svcsys); +/** + * @brief Set the blocking about mouse events to Ecore Evas. + * + * @param ee The Ecore_Evas. + * @param events_block The blocking about mouse events. + * + * @see ecore_evas_extn_socket_events_block_get() + * + * @since 1.15 + */ +EAPI void ecore_evas_extn_socket_events_block_set(Ecore_Evas *ee, Eina_Bool events_block); + +/** + * @brief Get the blocking about mouse events to Ecore Evas. + * + * @param ee The Ecore_Evas. + + * @return The blocking about mouse events. + * + * @see ecore_evas_extn_socket_events_block_set() + * + * @since 1.15 + */ +EAPI Eina_Bool ecore_evas_extn_socket_events_block_get(Ecore_Evas *ee); + /** * @brief Lock the pixel data so the socket cannot change it * diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c index a47c90efe0..05f702e9a9 100644 --- a/src/lib/ecore_evas/ecore_evas.c +++ b/src/lib/ecore_evas/ecore_evas.c @@ -3778,6 +3778,34 @@ ecore_evas_extn_socket_listen(Ecore_Evas *ee, const char *svcname, int svcnum, E return iface->listen(ee, svcname, svcnum, svcsys); } +EAPI void +ecore_evas_extn_socket_events_block_set(Ecore_Evas *ee, Eina_Bool events_block) +{ + void (*set)(Ecore_Evas*, Eina_Bool); + Eina_Module *m = _ecore_evas_engine_load("extn"); + EINA_SAFETY_ON_NULL_RETURN(m); + + set = eina_module_symbol_get(m, + "ecore_evas_extn_socket_events_block_set_internal"); + EINA_SAFETY_ON_NULL_RETURN(set); + + set(ee, events_block); +} + +EAPI Eina_Bool +ecore_evas_extn_socket_events_block_get(Ecore_Evas *ee) +{ + Eina_Bool (*get)(Ecore_Evas*); + Eina_Module *m = _ecore_evas_engine_load("extn"); + EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE); + + get = eina_module_symbol_get(m, + "ecore_evas_extn_socket_events_block_get_internal"); + EINA_SAFETY_ON_NULL_RETURN_VAL(get, EINA_FALSE); + + return get(ee); +} + EAPI void ecore_evas_extn_plug_object_data_lock(Evas_Object *obj) { diff --git a/src/lib/ecore_evas/ecore_evas_private.h b/src/lib/ecore_evas/ecore_evas_private.h index 82e26200d6..312fd0986f 100644 --- a/src/lib/ecore_evas/ecore_evas_private.h +++ b/src/lib/ecore_evas/ecore_evas_private.h @@ -190,6 +190,7 @@ struct _Ecore_Evas Eina_Bool alpha : 1; Eina_Bool transparent : 1; Eina_Bool in : 1; + Eina_Bool events_block : 1; /* @since 1.14 */ Eina_Hash *data; diff --git a/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c b/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c index 869005f907..550166c99b 100644 --- a/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c +++ b/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c @@ -1646,6 +1646,7 @@ _ipc_client_data(void *data, int type EINA_UNUSED, void *event) } break; case OP_EV_MOUSE_IN: + if (ee->events_block) break; if (e->size >= (int)sizeof(Ipc_Data_Ev_Mouse_In)) { Ipc_Data_Ev_Mouse_In *ipc = e->data; @@ -1659,6 +1660,7 @@ _ipc_client_data(void *data, int type EINA_UNUSED, void *event) } break; case OP_EV_MOUSE_OUT: + if (ee->events_block) break; if (e->size >= (int)sizeof(Ipc_Data_Ev_Mouse_Out)) { Ipc_Data_Ev_Mouse_Out *ipc = e->data; @@ -1672,6 +1674,7 @@ _ipc_client_data(void *data, int type EINA_UNUSED, void *event) } break; case OP_EV_MOUSE_UP: + if (ee->events_block) break; if (e->size >= (int)sizeof(Ipc_Data_Ev_Mouse_Up)) { Ipc_Data_Ev_Mouse_Up *ipc = e->data; @@ -1685,6 +1688,7 @@ _ipc_client_data(void *data, int type EINA_UNUSED, void *event) } break; case OP_EV_MOUSE_DOWN: + if (ee->events_block) break; if (e->size >= (int)sizeof(Ipc_Data_Ev_Mouse_Down)) { Ipc_Data_Ev_Mouse_Up *ipc = e->data; @@ -1698,6 +1702,7 @@ _ipc_client_data(void *data, int type EINA_UNUSED, void *event) } break; case OP_EV_MOUSE_MOVE: + if (ee->events_block) break; if (e->size >= (int)sizeof(Ipc_Data_Ev_Mouse_Move)) { Ipc_Data_Ev_Mouse_Move *ipc = e->data; @@ -1711,6 +1716,7 @@ _ipc_client_data(void *data, int type EINA_UNUSED, void *event) } break; case OP_EV_MOUSE_WHEEL: + if (ee->events_block) break; if (e->size >= (int)sizeof(Ipc_Data_Ev_Mouse_Wheel)) { Ipc_Data_Ev_Mouse_Wheel *ipc = e->data; @@ -1724,6 +1730,7 @@ _ipc_client_data(void *data, int type EINA_UNUSED, void *event) } break; case OP_EV_MULTI_UP: + if (ee->events_block) break; if (e->size >= (int)sizeof(Ipc_Data_Ev_Multi_Up)) { Ipc_Data_Ev_Multi_Up *ipc = e->data; @@ -1737,6 +1744,7 @@ _ipc_client_data(void *data, int type EINA_UNUSED, void *event) } break; case OP_EV_MULTI_DOWN: + if (ee->events_block) break; if (e->size >= (int)sizeof(Ipc_Data_Ev_Multi_Down)) { Ipc_Data_Ev_Multi_Down *ipc = e->data; @@ -1750,6 +1758,7 @@ _ipc_client_data(void *data, int type EINA_UNUSED, void *event) } break; case OP_EV_MULTI_MOVE: + if (ee->events_block) break; if (e->size >= (int)sizeof(Ipc_Data_Ev_Multi_Move)) { Ipc_Data_Ev_Multi_Move *ipc = e->data; @@ -2245,5 +2254,17 @@ _ecore_evas_extn_interface_new(void) return iface; } +EAPI void +ecore_evas_extn_socket_events_block_set_internal(Ecore_Evas *ee, Eina_Bool events_block) +{ + ee->events_block = events_block; +} + +EAPI Eina_Bool +ecore_evas_extn_socket_events_block_get_internal(Ecore_Evas *ee) +{ + return ee->events_block; +} + EINA_MODULE_INIT(_ecore_evas_extn_module_init); EINA_MODULE_SHUTDOWN(_ecore_evas_extn_module_shutdown);