From 0a0f8904f2cbb336cfee4e44df7936cab20c0ff8 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Fri, 28 Mar 2008 14:38:35 +0000 Subject: [PATCH] add xtest faking key support. SVN revision: 34128 --- legacy/ecore/configure.in | 10 ++++- legacy/ecore/src/lib/ecore_x/Ecore_X.h | 4 +- legacy/ecore/src/lib/ecore_x/Makefile.am | 6 +++ legacy/ecore/src/lib/ecore_x/ecore_x_test.c | 50 +++++++++++++++++++++ 4 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 legacy/ecore/src/lib/ecore_x/ecore_x_test.c diff --git a/legacy/ecore/configure.in b/legacy/ecore/configure.in index 14f49757ea..e80cd35273 100644 --- a/legacy/ecore/configure.in +++ b/legacy/ecore/configure.in @@ -283,6 +283,11 @@ if test "x$want_ecore_x_xcb" = "xyes" ; then AC_DEFINE(ECORE_XCB_XPRINT, 1, [Build support for XCB xprint]) ], [ have_ecore_x_xcb_xprint="no" ]) + PKG_CHECK_MODULES(XCB_XTEST, xcb-xtest, + [ have_ecore_x_xcb_xtest="yes" + AC_DEFINE(ECORE_XCB_XTEST, 1, [Build support for XCB xtest]) ], + [ have_ecore_x_xcb_xtest="no" ]) + AC_DEFINE(BUILD_ECORE_X, 1, [Build Ecore_X Module (XCB backend)]) AC_DEFINE(HAVE_ECORE_X_XCB, 1, [Defined to 1 if XCB backend is enabled.]) @@ -365,6 +370,7 @@ if test "x$have_ecore_x_xcb" != "xyes" ; then ECORE_CHECK_X_EXTENSION([Xprint], [Print.h], [Xp], [XpQueryScreens]) ECORE_CHECK_X_EXTENSION([Xrandr], [Xrandr.h], [Xrandr], [XRRSizes]) ECORE_CHECK_X_EXTENSION([Xrender], [Xrender.h], [Xrender], [XRenderFindVisualFormat]) + ECORE_CHECK_X_EXTENSION([Xtest], [XTest.h], [Xtst], [XTestFakeKeyEvent]) ECORE_CHECK_X_EXTENSION([Xss], [scrnsaver.h], [Xss], [XScreenSaverSelectInput]) fi fi @@ -835,9 +841,9 @@ echo " Ecore_Txt....................: $have_ecore_txt" echo " Ecore_Evas...................: $have_ecore_evas" if test "x$have_ecore_x_xcb" = "xyes" ; then - echo " Ecore_X (XCB backend)........: $have_ecore_x_xcb (Xprint: $have_ecore_x_xcb_xprint) (Xinerama: $have_ecore_x_xcb_xinerama) (Xrandr: $have_ecore_x_xcb_randr) (Xscreensaver: $have_ecore_x_xcb_screensaver) (Xshape: $have_ecore_x_xcb_shape) (Xsync: $have_ecore_x_xcb_sync) (Xrender: $have_ecore_x_xcb_render) (Xfixes: $have_ecore_x_xcb_xfixes) (Xcomposite: $have_ecore_x_xcb_composite) (Xdamage: $have_ecore_x_xcb_damage) (Xdpms: $have_ecore_x_xcb_dpms)" + echo " Ecore_X (XCB backend)........: $have_ecore_x_xcb (Xprint: $have_ecore_x_xcb_xprint) (Xinerama: $have_ecore_x_xcb_xinerama) (Xrandr: $have_ecore_x_xcb_randr) (Xscreensaver: $have_ecore_x_xcb_screensaver) (Xshape: $have_ecore_x_xcb_shape) (Xsync: $have_ecore_x_xcb_sync) (Xrender: $have_ecore_x_xcb_render) (Xfixes: $have_ecore_x_xcb_xfixes) (Xcomposite: $have_ecore_x_xcb_composite) (Xdamage: $have_ecore_x_xcb_damage) (Xdpms: $have_ecore_x_xcb_dpms) (Xtest $have_ecore_x_xcb_xtest)" else - echo " Ecore_X (Xlib backend).......: $have_ecore_x (Xcursor: $use_Xcursor) (Xprint: $use_xprint) (Xinerama: $use_xinerama) (Xrandr: $use_xrandr) (Xscreensaver: $use_xss) (Xrender: $use_xrender) (Xcomposite: $use_xcomposite) (Xfixes: $use_xfixes) (Xdamage: $use_xdamage) (Xdpms: $use_xdpms)" + echo " Ecore_X (Xlib backend).......: $have_ecore_x (Xcursor: $use_Xcursor) (Xprint: $use_xprint) (Xinerama: $use_xinerama) (Xrandr: $use_xrandr) (Xscreensaver: $use_xss) (Xrender: $use_xrender) (Xcomposite: $use_xcomposite) (Xfixes: $use_xfixes) (Xdamage: $use_xdamage) (Xdpms: $use_xdpms) (Xtest $use_xtest)" fi echo " Ecore_Evas X11 Support.......: $have_ecore_evas_x11" echo " Ecore_Evas X11 GL Support....: $have_ecore_evas_x11_gl" diff --git a/legacy/ecore/src/lib/ecore_x/Ecore_X.h b/legacy/ecore/src/lib/ecore_x/Ecore_X.h index 60721d21fe..8ee23caad4 100644 --- a/legacy/ecore/src/lib/ecore_x/Ecore_X.h +++ b/legacy/ecore/src/lib/ecore_x/Ecore_X.h @@ -1681,7 +1681,9 @@ EAPI void ecore_x_dpms_timeout_standby_set(unsigned int new_timeout EAPI void ecore_x_dpms_timeout_suspend_set(unsigned int new_timeout); EAPI void ecore_x_dpms_timeout_off_set(unsigned int new_timeout); - +EAPI int ecore_x_test_fake_key_down(const char *key); +EAPI int ecore_x_test_fake_key_up(const char *key); + #ifdef __cplusplus } #endif diff --git a/legacy/ecore/src/lib/ecore_x/Makefile.am b/legacy/ecore/src/lib/ecore_x/Makefile.am index d7b44d3c37..fd46526a6b 100644 --- a/legacy/ecore/src/lib/ecore_x/Makefile.am +++ b/legacy/ecore/src/lib/ecore_x/Makefile.am @@ -13,6 +13,7 @@ AM_CPPFLAGS = \ @XCB_XFIXES_CFLAGS@ \ @XCB_XINERAMA_CFLAGS@ \ @XCB_XPRINT_CFLAGS@ \ +@XCB_XTEST_CFLAGS@ \ @XCB_CFLAGS@ \ -I$(top_srcdir)/src/lib/ecore \ -I$(top_srcdir)/src/lib/ecore_txt \ @@ -30,6 +31,7 @@ AM_CPPFLAGS = \ @XRANDR_CFLAGS@ \ @XRENDER_CFLAGS@ \ @XSS_CFLAGS@ \ +@XTEST_CFLAGS@ \ @x_cflags@ \ -I$(top_srcdir)/src/lib/ecore \ -I$(top_srcdir)/src/lib/ecore_txt \ @@ -85,6 +87,7 @@ libecore_x_la_LIBADD = \ @XCB_XFIXES_LIBS@ \ @XCB_XINERAMA_LIBS@ \ @XCB_XPRINT_LIBS@ \ +@XCB_XTEST_LIBS@ \ @XCB_LIBS@ \ $(top_builddir)/src/lib/ecore/libecore.la \ $(top_builddir)/src/lib/ecore_txt/libecore_txt.la @@ -130,6 +133,7 @@ ecore_x_screensaver.c \ ecore_x_dpms.c \ ecore_x_drawable.c \ ecore_x_cursor.c \ +ecore_x_test.c \ ecore_x_private.h libecore_x_la_LIBADD = \ @@ -143,6 +147,7 @@ libecore_x_la_LIBADD = \ @XRANDR_LIBS@ \ @XRENDER_LIBS@ \ @XSS_LIBS@ \ +@XTEST_LIBS@ \ @x_libs@ \ $(top_builddir)/src/lib/ecore/libecore.la \ $(top_builddir)/src/lib/ecore_txt/libecore_txt.la @@ -185,4 +190,5 @@ ecore_x_screensaver.c \ ecore_x_dpms.c \ ecore_x_drawable.c \ ecore_x_cursor.c \ +ecore_x_test.c \ ecore_x_private.h diff --git a/legacy/ecore/src/lib/ecore_x/ecore_x_test.c b/legacy/ecore/src/lib/ecore_x/ecore_x_test.c new file mode 100644 index 0000000000..73bbf683b2 --- /dev/null +++ b/legacy/ecore/src/lib/ecore_x/ecore_x_test.c @@ -0,0 +1,50 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ + +#include "ecore_x_private.h" +#include "Ecore_X.h" + +EAPI int +ecore_x_test_fake_key_down(const char *key) +{ +#ifdef ECORE_XTEST + KeyCode keycode = 0; + KeySym keysym; + + if (!strncmp(key, "Keycode-", 8)) + keycode = atoi(key + 8); + else + { + keysym = XStringToKeysym(key); + if (keysym == NoSymbol) return 0; + keycode = XKeysymToKeycode(_ecore_x_disp, XStringToKeysym(key)); + } + if (keycode == 0) return 0; + return XTestFakeKeyEvent(_ecore_x_disp, keycode, 1, 0); +#else + return 0; +#endif +} + +EAPI int +ecore_x_test_fake_key_up(const char *key) +{ +#ifdef ECORE_XTEST + KeyCode keycode = 0; + KeySym keysym; + + if (!strncmp(key, "Keycode-", 8)) + keycode = atoi(key + 8); + else + { + keysym = XStringToKeysym(key); + if (keysym == NoSymbol) return 0; + keycode = XKeysymToKeycode(_ecore_x_disp, XStringToKeysym(key)); + } + if (keycode == 0) return 0; + return XTestFakeKeyEvent(_ecore_x_disp, keycode, 0, 0); +#else + return 0; +#endif +}