summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChunEon Park <chuneon.park@samsung.com>2014-04-16 17:17:17 +0900
committerChunEon Park <chuneon.park@samsung.com>2014-04-16 17:17:17 +0900
commitf40fbe96c11c78e54b660f2803eadc3b3982ed6b (patch)
tree42419573bf1e8ed83ac56a424b8bfddcd35e42aa
parentc080f567a9579893157c1e3ae63a2d5655ddab60 (diff)
parent0cc713b7653531115f4d95deb4a5442c8444527b (diff)
downloadefl-f40fbe96c11c78e54b660f2803eadc3b3982ed6b.tar.gz
Merge branch 'master' into devs/cedric/evas-3d
Conflicts: src/lib/evas/Evas_Eo.h
-rw-r--r--Makefile.am5
-rw-r--r--cmakeconfig/EolianConfig.cmake.in32
-rw-r--r--configure.ac5
-rw-r--r--doc/main.dox28
-rw-r--r--src/lib/ecore_drm/ecore_drm_evdev.c10
-rw-r--r--src/lib/ecore_input/Ecore_Input.h4
-rw-r--r--src/lib/ecore_input_evas/ecore_input_evas.c18
-rw-r--r--src/lib/eo/Eo.h15
-rw-r--r--src/lib/eo/eo.c23
-rw-r--r--src/lib/evas/Evas_Common.h4
-rw-r--r--src/lib/evas/Evas_Eo.h2
-rw-r--r--src/lib/evas/Evas_Legacy.h40
-rw-r--r--src/lib/evas/canvas/evas.eo40
-rw-r--r--src/lib/evas/canvas/evas_events.c58
-rw-r--r--src/lib/evas/include/evas_private.h2
15 files changed, 247 insertions, 39 deletions
diff --git a/Makefile.am b/Makefile.am
index cfdb3048e1..83b817245e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -258,6 +258,11 @@ eo_cmakeconfig_DATA = \
cmakeconfig/EoConfig.cmake \
cmakeconfig/EoConfigVersion.cmake
+eolian_cmakeconfigdir = $(libdir)/cmake/Eolian/
+eolian_cmakeconfig_DATA = \
+cmakeconfig/EolianConfig.cmake \
+cmakeconfig/EolianConfigVersion.cmake
+
eet_cmakeconfigdir = $(libdir)/cmake/Eet/
eet_cmakeconfig_DATA = \
cmakeconfig/EetConfig.cmake \
diff --git a/cmakeconfig/EolianConfig.cmake.in b/cmakeconfig/EolianConfig.cmake.in
new file mode 100644
index 0000000000..8ab886b03a
--- /dev/null
+++ b/cmakeconfig/EolianConfig.cmake.in
@@ -0,0 +1,32 @@
+# - Try to find eolian
+# Once done this will define
+# EOLIAN_FOUND - System has eolian
+# EOLIAN_INCLUDE_DIRS - The eolian include directories
+# EOLIAN_LIBRARIES - The libraries needed to use eolian
+# EOLIAN_DEFINITIONS - Compiler switches required for using eolian
+
+set(MY_PKG eolian)
+
+find_package(PkgConfig)
+if ("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}" VERSION_GREATER "2.8.1")
+ # "QUIET" was introduced in 2.8.2
+ set(_QUIET QUIET)
+endif ()
+pkg_check_modules(PC_LIBEOLIAN ${_QUIET} ${MY_PKG})
+
+find_library(EOLIAN_LIBRARY
+ NAMES ${PC_LIBEOLIAN_LIBRARIES}
+ HINTS ${PC_LIBEOLIAN_LIBDIR} ${PC_LIBEOLIAN_LIBRARY_DIRS} )
+
+set(EOLIAN_DEFINITIONS ${PC_LIBEOLIAN_CFLAGS_OTHER})
+set(EOLIAN_LIBRARIES ${EOLIAN_LIBRARY})
+set(EOLIAN_INCLUDE_DIRS ${PC_LIBEOLIAN_INCLUDE_DIRS})
+
+include(FindPackageHandleStandardArgs)
+# handle the QUIETLY and REQUIRED arguments and set EOLIAN_FOUND to TRUE
+# if all listed variables are TRUE
+find_package_handle_standard_args(${MY_PKG} DEFAULT_MSG
+ EOLIAN_LIBRARIES EOLIAN_INCLUDE_DIRS)
+
+mark_as_advanced(EOLIAN_INCLUDE_DIRS EOLIAN_LIBRARY EOLIAN_LIBRARIES EOLIAN_DEFINITIONS)
+
diff --git a/configure.ac b/configure.ac
index f3528fbf9b..5f08cdae17 100644
--- a/configure.ac
+++ b/configure.ac
@@ -322,7 +322,8 @@ if test "${want_coverage}" = "yes" ; then
if test "x${prefer_assert}" = "xno"; then
EFL_COV_CFLAGS="${EFL_COV_CFLAGS} -DNDEBUG"
else
- EFL_COV_CFLAGS="${EFL_COV_CFLAGS} -g -O0 -DDEBUG"
+ # Add -DDEBUG again once eolian is fixed
+ EFL_COV_CFLAGS="${EFL_COV_CFLAGS} -g -O0"
fi
else
AC_MSG_ERROR([lcov is not found])
@@ -4184,6 +4185,8 @@ cmakeconfig/EezeConfig.cmake
cmakeconfig/EezeConfigVersion.cmake:cmakeconfig/EFLConfigVersion.cmake.in
cmakeconfig/EoConfig.cmake
cmakeconfig/EoConfigVersion.cmake:cmakeconfig/EFLConfigVersion.cmake.in
+cmakeconfig/EolianConfig.cmake
+cmakeconfig/EolianConfigVersion.cmake:cmakeconfig/EFLConfigVersion.cmake.in
cmakeconfig/EetConfig.cmake
cmakeconfig/EetConfigVersion.cmake:cmakeconfig/EFLConfigVersion.cmake.in
cmakeconfig/EvasConfig.cmake
diff --git a/doc/main.dox b/doc/main.dox
index f132f3a465..db3872987a 100644
--- a/doc/main.dox
+++ b/doc/main.dox
@@ -2,27 +2,27 @@
* @mainpage EFL
*
* The Enlightenment Project covers more than simple window management. It
- * also includes the EFL(Enlightenment Foundation Libraries), the EFL is a set
- * of libraries each providing a great deal of functionality. Below you can
- * find documentation auto-generated daily from SVN source for these
+ * also includes the EFL, or Enlightenment Foundation Libraries: a framework
+ * which provides a great deal of functionality. Below you can
+ * find documentation auto-generated daily from GIT source for these
* libraries:
*
- * @li @ref eina_main data types and low-level/basic abstractions.
- * @li @ref eo_main generic object system.
- * @li @ref evas_main drawing canvas.
- * @li @ref eet_main binary data parser and serializer.
- * @li @ref embryo_main embedded script language.
* @li @ref ecore_main operating system abstraction and integration.
- * @li @ref escape_main playstation3 portability layer.
- * @li @ref evil_main microsoft windows portability layer.
+ * @li @ref edje_main layout and theme library with super powers.
+ * @li @ref eet_main binary data parser and serializer.
+ * @li @ref eeze_main hardware device manipulation and notification.
+ * @li @ref efreet_main freedesktop.org (xdg) menu and desktop integration.
+ * @li @ref eina_main data types and low-level/basic abstractions.
* @li @ref eio_main asynchronous input/output
* @li @ref eldbus_main d-bus integration.
- * @li @ref efreet_main freedesktop.org (xdg) menu and desktop integration.
- * @li @ref eeze_main hardware device manipulation and notification.
- * @li @ref ephysics_main physics simulation integration and visual effects.
- * @li @ref edje_main layout and theme library with super powers.
+ * @li @ref embryo_main embedded script language.
* @li @ref emotion_main to play music and videos.
+ * @li @ref eo_main generic object system.
+ * @li @ref ephysics_main physics simulation integration and visual effects.
+ * @li @ref escape_main playstation3 portability layer.
* @li @ref ethumb_main to generate thumbnail images of files.
+ * @li @ref evas_main drawing canvas.
+ * @li @ref evil_main microsoft windows portability layer.
*
*/
diff --git a/src/lib/ecore_drm/ecore_drm_evdev.c b/src/lib/ecore_drm/ecore_drm_evdev.c
index 28772a9845..8909746ee7 100644
--- a/src/lib/ecore_drm/ecore_drm_evdev.c
+++ b/src/lib/ecore_drm/ecore_drm_evdev.c
@@ -291,11 +291,13 @@ static void
_device_notify_key(Ecore_Drm_Evdev *dev, struct input_event *event, unsigned int timestamp)
{
unsigned int code, nsyms;
+ unsigned int *keycode;
const xkb_keysym_t *syms;
xkb_keysym_t sym = XKB_KEY_NoSymbol;
char key[256], keyname[256], compose[256];
Ecore_Event_Key *e;
Ecore_Drm_Input *input;
+ int evtype;
if (!(input = dev->seat->input)) return;
@@ -354,14 +356,18 @@ _device_notify_key(Ecore_Drm_Evdev *dev, struct input_event *event, unsigned int
e->root_window = (Ecore_Window)input->dev->window;
e->timestamp = timestamp;
e->same_screen = 1;
+ e->keycode = event->code;
+ e->data = NULL;
_device_modifiers_update(dev);
e->modifiers = dev->xkb.modifiers;
if (event->value)
- ecore_event_add(ECORE_EVENT_KEY_DOWN, e, NULL, NULL);
+ evtype = ECORE_EVENT_KEY_DOWN;
else
- ecore_event_add(ECORE_EVENT_KEY_UP, e, NULL, NULL);
+ evtype = ECORE_EVENT_KEY_UP;
+
+ ecore_event_add(evtype, e, NULL, NULL);
}
static void
diff --git a/src/lib/ecore_input/Ecore_Input.h b/src/lib/ecore_input/Ecore_Input.h
index ec40af8062..46e3e6ea87 100644
--- a/src/lib/ecore_input/Ecore_Input.h
+++ b/src/lib/ecore_input/Ecore_Input.h
@@ -119,6 +119,10 @@ extern "C" {
unsigned int modifiers;
int same_screen;
+
+ unsigned int keycode; /**< Key scan code numeric value @since 1.10 */
+
+ void *data; /**< User data associated with an Ecore_Event_Key @since 1.10 */
};
struct _Ecore_Event_Mouse_Button
diff --git a/src/lib/ecore_input_evas/ecore_input_evas.c b/src/lib/ecore_input_evas/ecore_input_evas.c
index ef08c48c59..52058624fa 100644
--- a/src/lib/ecore_input_evas/ecore_input_evas.c
+++ b/src/lib/ecore_input_evas/ecore_input_evas.c
@@ -332,9 +332,23 @@ _ecore_event_evas_key(Ecore_Event_Key *e, Ecore_Event_Press press)
if (!lookup) return ECORE_CALLBACK_PASS_ON;
ecore_event_evas_modifier_lock_update(lookup->evas, e->modifiers);
if (press == ECORE_DOWN)
- evas_event_feed_key_down(lookup->evas, e->keyname, e->key, e->string, e->compose, e->timestamp, NULL);
+ evas_event_feed_key_down_with_keycode(lookup->evas,
+ e->keyname,
+ e->key,
+ e->string,
+ e->compose,
+ e->timestamp,
+ e->data,
+ e->keycode);
else
- evas_event_feed_key_up(lookup->evas, e->keyname, e->key, e->string, e->compose, e->timestamp, NULL);
+ evas_event_feed_key_up_with_keycode(lookup->evas,
+ e->keyname,
+ e->key,
+ e->string,
+ e->compose,
+ e->timestamp,
+ e->data,
+ e->keycode);
return ECORE_CALLBACK_PASS_ON;
}
diff --git a/src/lib/eo/Eo.h b/src/lib/eo/Eo.h
index 6e6979942d..13179b85de 100644
--- a/src/lib/eo/Eo.h
+++ b/src/lib/eo/Eo.h
@@ -570,16 +570,11 @@ EAPI void _eo_do_end(const Eo **ojb);
// eo object method calls batch,
#define _eo_do_common(eoid, clsid, is_super, ...) \
- do \
- { \
- const Eo *_eoid_ = eoid; \
- if (_eo_do_start(_eoid_, clsid, is_super, __FILE__, __FUNCTION__, __LINE__)) \
- { \
- const Eo *_id_clean_ EO_DO_CLEANUP = _eoid_; \
- __VA_ARGS__; \
- (void) _id_clean_; \
- } \
- } while (0)
+ ({ \
+ const Eo *_eoid_ EO_DO_CLEANUP = eoid; \
+ _eo_do_start(_eoid_, clsid, is_super, __FILE__, __FUNCTION__, __LINE__); \
+ __VA_ARGS__; \
+ })
#define eo_do(eoid, ...) _eo_do_common(eoid, NULL, EINA_FALSE, __VA_ARGS__)
diff --git a/src/lib/eo/eo.c b/src/lib/eo/eo.c
index d207f206c0..4acf0f6b28 100644
--- a/src/lib/eo/eo.c
+++ b/src/lib/eo/eo.c
@@ -147,7 +147,8 @@ _eo_is_a_class(const Eo *eo_id)
if (!eo_id) return EINA_FALSE;
oid = ((Eo_Base *) eo_id)->id;
#endif
- return (((oid >> REF_TAG_SHIFT) & 0x1) == 0x0);
+ return ((((oid >> REF_TAG_SHIFT) & 0x1) == 0x0) &&
+ (oid & MASK_CLASS_TAG));
}
static inline _Eo_Class *
@@ -415,6 +416,7 @@ _eo_do_internal(const Eo *eo_id, const Eo_Class *cur_klass_id,
EAPI Eina_Bool
_eo_do_start(const Eo *eo_id, const Eo_Class *cur_klass_id, Eina_Bool is_super, const char *file EINA_UNUSED, const char *func EINA_UNUSED, int line EINA_UNUSED)
{
+ Eina_Bool ret = EINA_TRUE;
Eo_Stack_Frame *fptr, *pfptr;
Eo_Call_Stack *stack = _eo_call_stack_get();
@@ -427,11 +429,16 @@ _eo_do_start(const Eo *eo_id, const Eo_Class *cur_klass_id, Eina_Bool is_super,
fptr++;
if (!_eo_do_internal(eo_id, cur_klass_id, is_super, fptr, pfptr))
- return EINA_FALSE;
+ {
+ fptr->o.obj = NULL;
+ fptr->cur_klass = NULL;
+
+ ret = EINA_FALSE;
+ }
stack->frame_ptr++;
- return EINA_TRUE;
+ return ret;
}
EAPI void
@@ -470,6 +477,10 @@ _eo_call_resolve(const char *func_name, const Eo_Op op, Eo_Op_Call_Data *call, c
if (op == EO_NOOP) return EINA_FALSE;
fptr = _eo_call_stack_get()->frame_ptr;
+
+ if (EINA_UNLIKELY(!fptr->o.obj))
+ return EINA_FALSE;
+
is_obj = !_eo_is_a_class(fptr->eo_id);
klass = (is_obj) ? fptr->o.obj->klass : fptr->o.kls;
@@ -638,6 +649,9 @@ _eo_api_op_id_get(const void *api_func, const char *file, int line)
Eina_Bool class_ref = _eo_is_a_class(stack->frame_ptr->eo_id);
+ if (EINA_UNLIKELY(!stack->frame_ptr->o.obj))
+ return EO_NOOP;
+
if (class_ref)
klass = stack->frame_ptr->o.kls;
else
@@ -799,6 +813,9 @@ _eo_add_internal_end(const char *file, int line, const Eo *eo_id)
return NULL;
}
+ if (EINA_UNLIKELY(!fptr->o.obj))
+ return NULL;
+
if (!fptr->o.obj->condtor_done || fptr->o.obj->do_error)
{
const _Eo_Class *klass = (fptr->cur_klass) ?
diff --git a/src/lib/evas/Evas_Common.h b/src/lib/evas/Evas_Common.h
index eeb82b39bd..bab22af087 100644
--- a/src/lib/evas/Evas_Common.h
+++ b/src/lib/evas/Evas_Common.h
@@ -733,6 +733,8 @@ struct _Evas_Event_Key_Down /** Key press event */
unsigned int timestamp;
Evas_Event_Flags event_flags;
Evas_Device *dev;
+
+ unsigned int keycode; /**< Key scan code numeric value @since 1.10 */
};
struct _Evas_Event_Key_Up /** Key release event */
@@ -748,6 +750,8 @@ struct _Evas_Event_Key_Up /** Key release event */
unsigned int timestamp;
Evas_Event_Flags event_flags;
Evas_Device *dev;
+
+ unsigned int keycode; /**< Key scan code numeric value @since 1.10 */
};
struct _Evas_Event_Render_Post /** Send when the frame rendering is done @since 1.8 */
diff --git a/src/lib/evas/Evas_Eo.h b/src/lib/evas/Evas_Eo.h
index 3535211879..73c34c82de 100644
--- a/src/lib/evas/Evas_Eo.h
+++ b/src/lib/evas/Evas_Eo.h
@@ -226,4 +226,4 @@ EAPI extern const Eo_Event_Description _EVAS_CANVAS_EVENT_RENDER_POST;
#include "canvas/evas_3d_scene.eo.h"
-#include "canvas/evas_3d_object.eo.h" \ No newline at end of file
+#include "canvas/evas_3d_object.eo.h"
diff --git a/src/lib/evas/Evas_Legacy.h b/src/lib/evas/Evas_Legacy.h
index 80239cb602..59495665e6 100644
--- a/src/lib/evas/Evas_Legacy.h
+++ b/src/lib/evas/Evas_Legacy.h
@@ -1246,6 +1246,46 @@ EAPI void evas_event_feed_key_down(Evas *e, const char *keyname, const char *key
EAPI void evas_event_feed_key_up(Evas *e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data) EINA_ARG_NONNULL(1);
/**
+ * Key down event feed with keycode
+ *
+ * @param e The canvas to thaw out
+ * @param keyname Name of the key
+ * @param key The key pressed.
+ * @param string A String
+ * @param compose The compose string
+ * @param timestamp Timestamp of the mouse up event
+ * @param data Data for canvas.
+ * @param keycode Key scan code numeric value for canvas.
+ *
+ * This function will set some evas properties that is necessary when
+ * a key is pressed. It prepares information to be treated by the
+ * callback function.
+ *
+ * @since 1.10
+ */
+EAPI void evas_event_feed_key_down_with_keycode(Evas *e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data, unsigned int keycode) EINA_ARG_NONNULL(1);
+
+/**
+ * Key up event feed with keycode
+ *
+ * @param e The canvas to thaw out
+ * @param keyname Name of the key
+ * @param key The key released.
+ * @param string string
+ * @param compose compose
+ * @param timestamp Timestamp of the mouse up event
+ * @param data Data for canvas.
+ * @param keycode Key scan code numeric value for canvas.
+ *
+ * This function will set some evas properties that is necessary when
+ * a key is released. It prepares information to be treated by the
+ * callback function.
+ *
+ * @since 1.10
+ */
+EAPI void evas_event_feed_key_up_with_keycode(Evas *e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data, unsigned int keycode) EINA_ARG_NONNULL(1);
+
+/**
* Hold event feed
*
* @param e The given canvas pointer.
diff --git a/src/lib/evas/canvas/evas.eo b/src/lib/evas/canvas/evas.eo
index d6367c91c1..12a105cec2 100644
--- a/src/lib/evas/canvas/evas.eo
+++ b/src/lib/evas/canvas/evas.eo
@@ -1730,6 +1730,46 @@ class Evas (Eo_Base, Evas_Common_Interface)
@in Evas_Coord y; /*@ The canvas y co-ordinate */
}
}
+ event_feed_key_down_with_keycode {
+ /*@
+ Key down event feed with keycode
+
+ This function will set some evas properties that is necessary when
+ a key is pressed. It prepares information to be treated by the
+ callback function.
+
+ @since 1.10 */
+
+ params {
+ @in const char *keyname; /*@ Name of the key */
+ @in const char *key; /*@ The key pressed. */
+ @in const char *string; /*@ A String */
+ @in const char *compose; /*@ The compose string */
+ @in unsigned int timestamp; /*@ Timestamp of the mouse up event */
+ @in const void *data; /*@ Data for canvas. */
+ @in unsigned int keycode; /*@ Key scan code numeric value for canvas. */
+ }
+ }
+ event_feed_key_up_with_keycode {
+ /*@
+ Key up event feed with keycode
+
+ This function will set some evas properties that is necessary when
+ a key is released. It prepares information to be treated by the
+ callback function.
+
+ @since 1.10 */
+
+ params {
+ @in const char *keyname; /*@ Name of the key */
+ @in const char *key; /*@ The key released. */
+ @in const char *string; /*@ string */
+ @in const char *compose; /*@ compose */
+ @in unsigned int timestamp; /*@ Timestamp of the mouse up event */
+ @in const void *data; /*@ Data for canvas. */
+ @in unsigned int keycode; /*@ Key scan code numeric value for canvas. */
+ }
+ }
}
implements {
Eo_Base::constructor;
diff --git a/src/lib/evas/canvas/evas_events.c b/src/lib/evas/canvas/evas_events.c
index d53451b94e..b1fc48e21b 100644
--- a/src/lib/evas/canvas/evas_events.c
+++ b/src/lib/evas/canvas/evas_events.c
@@ -2445,10 +2445,18 @@ _evas_event_feed_multi_move(Eo *eo_e, Evas_Public_Data *e, int d, int x, int y,
pres, ang, fx, fy, timestamp, data);
}
-EOLIAN void
-_evas_event_feed_key_down(Eo *eo_e, Evas_Public_Data *e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data)
+static void
+_canvas_event_feed_key_down_internal(Eo *eo_e,
+ void *_pd,
+ const char *keyname,
+ const char *key,
+ const char *string,
+ const char *compose,
+ unsigned int timestamp,
+ const void *data,
+ unsigned int keycode)
{
-
+ Evas_Public_Data *e = _pd;
int event_id = 0;
if (!keyname) return;
@@ -2473,6 +2481,7 @@ _evas_event_feed_key_down(Eo *eo_e, Evas_Public_Data *e, const char *keyname, co
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
ev.dev = _evas_device_top_get(eo_e);
+ ev.keycode = keycode;
if (ev.dev) _evas_device_ref(ev.dev);
if (e->grabs)
@@ -2542,10 +2551,18 @@ _evas_event_feed_key_down(Eo *eo_e, Evas_Public_Data *e, const char *keyname, co
_evas_unwalk(e);
}
-EOLIAN void
-_evas_event_feed_key_up(Eo *eo_e, Evas_Public_Data *e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data)
+static void
+_canvas_event_feed_key_up_internal(Eo *eo_e,
+ void *_pd,
+ const char *keyname,
+ const char *key,
+ const char *string,
+ const char *compose,
+ unsigned int timestamp,
+ const void *data,
+ unsigned int keycode)
{
-
+ Evas_Public_Data *e = _pd;
int event_id = 0;
if (!keyname) return;
if (e->is_frozen) return;
@@ -2569,6 +2586,7 @@ _evas_event_feed_key_up(Eo *eo_e, Evas_Public_Data *e, const char *keyname, cons
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
ev.dev = _evas_device_top_get(eo_e);
+ ev.keycode = keycode;
if (ev.dev) _evas_device_ref(ev.dev);
if (e->grabs)
@@ -2640,6 +2658,34 @@ _evas_event_feed_key_up(Eo *eo_e, Evas_Public_Data *e, const char *keyname, cons
}
EOLIAN void
+_evas_event_feed_key_down(Eo *eo_e, Evas_Public_Data *e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data)
+{
+ _canvas_event_feed_key_down_internal(eo_e, e, keyname, key, string,
+ compose, timestamp, data, 0);
+}
+
+EOLIAN void
+_evas_event_feed_key_up(Eo *eo_e, Evas_Public_Data *e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data)
+{
+ _canvas_event_feed_key_up_internal(eo_e, e, keyname, key, string,
+ compose, timestamp, data, 0);
+}
+
+EOLIAN void
+_evas_event_feed_key_down_with_keycode(Eo *eo_e, Evas_Public_Data *e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data, unsigned int keycode)
+{
+ _canvas_event_feed_key_down_internal(eo_e, e, keyname, key, string,
+ compose, timestamp, data, keycode);
+}
+
+EOLIAN void
+_evas_event_feed_key_up_with_keycode(Eo *eo_e, Evas_Public_Data *e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data, unsigned int keycode)
+{
+ _canvas_event_feed_key_up_internal(eo_e, e, keyname, key, string,
+ compose, timestamp, data, keycode);
+}
+
+EOLIAN void
_evas_event_feed_hold(Eo *eo_e, Evas_Public_Data *e, int hold, unsigned int timestamp, const void *data)
{
diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h
index a17b23a18a..1b16722c0e 100644
--- a/src/lib/evas/include/evas_private.h
+++ b/src/lib/evas/include/evas_private.h
@@ -1421,6 +1421,8 @@ void _canvas_event_input_multi_up(Eo *e, void *_pd, va_list *list);
void _canvas_event_input_multi_move(Eo *e, void *_pd, va_list *list);
void _canvas_event_feed_key_down(Eo *e, void *_pd, va_list *list);
void _canvas_event_feed_key_up(Eo *e, void *_pd, va_list *list);
+void _canvas_event_feed_key_down_with_keycode(Eo *e, void *_pd, va_list *list);
+void _canvas_event_feed_key_up_with_keycode(Eo *e, void *_pd, va_list *list);
void _canvas_event_feed_hold(Eo *e, void *_pd, va_list *list);
void _canvas_event_refeed_event(Eo *e, void *_pd, va_list *list);
void _canvas_event_down_count_get(Eo *e, void *_pd, va_list *list);