From fe40d275b9363adb3977bdc412907175b0fa4b6b Mon Sep 17 00:00:00 2001 From: raster Date: Sat, 16 Jan 2010 12:20:56 +0000 Subject: [PATCH] multitouch support for xi2 and floating xi devices git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/ecore@45213 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- configure.ac | 4 +- po/cs.po | 56 +++++++-------- po/de.po | 57 ++++++++-------- po/el.po | 73 ++++++++++---------- po/fr.po | 56 +++++++-------- po/it.po | 56 +++++++-------- src/lib/ecore_evas/ecore_evas_buffer.c | 54 +++++++++++++++ src/lib/ecore_evas/ecore_evas_x.c | 9 +++ src/lib/ecore_input/Ecore_Input.h | 10 +++ src/lib/ecore_input_evas/ecore_input_evas.c | 26 +++++-- src/lib/ecore_x/Ecore_X.h | 4 ++ src/lib/ecore_x/xlib/Makefile.am | 3 +- src/lib/ecore_x/xlib/ecore_x_events.c | 102 +++++++++++++++++++++++++--- src/lib/ecore_x/xlib/ecore_x_private.h | 3 + src/lib/ecore_x/xlib/ecore_x_xi2.c | 86 +++++++++++++++++++++++ 15 files changed, 433 insertions(+), 166 deletions(-) create mode 100644 src/lib/ecore_x/xlib/ecore_x_xi2.c diff --git a/configure.ac b/configure.ac index 8f04b6d..2265bda 100644 --- a/configure.ac +++ b/configure.ac @@ -657,8 +657,9 @@ if ! test "x$have_ecore_x_xcb" = "xyes" ; then 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]) + ECORE_CHECK_X_EXTENSION([Xi2], [XInput2.h], [Xi], [XIQueryDevice]) - ecore_x_libs_private="${Xcursor_libs} ${XKB_LIBS} ${XCOMPOSITE_LIBS} ${XDAMAGE_LIBS} ${XDPMS_LIBS} ${XFIXES_LIBS} ${XINERAMA_LIBS} ${XPRINT_LIBS} ${XRANDR_LIBS} ${XRENDER_LIBS} ${XTEST_LIBS} ${XSS_LIBS} " + ecore_x_libs_private="${Xcursor_libs} ${XKB_LIBS} ${XCOMPOSITE_LIBS} ${XDAMAGE_LIBS} ${XDPMS_LIBS} ${XFIXES_LIBS} ${XINERAMA_LIBS} ${XPRINT_LIBS} ${XRANDR_LIBS} ${XRENDER_LIBS} ${XTEST_LIBS} ${XSS_LIBS} ${XI2_LIBS}" AC_DEFINE(HAVE_ECORE_X_XLIB, 1, [Defined to 1 if Xlib is enabled.]) have_x="yes" @@ -1280,6 +1281,7 @@ if test "x$have_ecore_x" = "xyes" ; then echo " Xdpms......................: $use_xdpms" echo " Xtest......................: $use_xtest" echo " XIM........................: $want_xim" + echo " Xi2........................: $use_xi2" fi else echo " Ecore_X......................: $have_ecore_x" diff --git a/po/cs.po b/po/cs.po index bfd46a4..8f9b913 100644 --- a/po/cs.po +++ b/po/cs.po @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: ecore\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2009-10-28 11:13+1100\n" +"POT-Creation-Date: 2010-01-16 17:27+0800\n" "PO-Revision-Date: 2009-10-27 19:35+0100\n" "Last-Translator: quaker66 \n" "Language-Team: cs \n" @@ -59,112 +59,112 @@ msgstr "CHYBA: neznámá volba --%s.\n" msgid "ERROR: unknown option -%c.\n" msgstr "CHYBA: neznámá volba -%c.\n" -#: src/lib/ecore/ecore_getopt.c:762 +#: src/lib/ecore/ecore_getopt.c:761 msgid "ERROR: " msgstr "CHYBA: " -#: src/lib/ecore/ecore_getopt.c:839 src/lib/ecore/ecore_getopt.c:955 -#: src/lib/ecore/ecore_getopt.c:968 src/lib/ecore/ecore_getopt.c:980 -#: src/lib/ecore/ecore_getopt.c:994 src/lib/ecore/ecore_getopt.c:1038 -#: src/lib/ecore/ecore_getopt.c:1147 src/lib/ecore/ecore_getopt.c:1184 +#: src/lib/ecore/ecore_getopt.c:838 src/lib/ecore/ecore_getopt.c:954 +#: src/lib/ecore/ecore_getopt.c:967 src/lib/ecore/ecore_getopt.c:979 +#: src/lib/ecore/ecore_getopt.c:993 src/lib/ecore/ecore_getopt.c:1037 +#: src/lib/ecore/ecore_getopt.c:1146 src/lib/ecore/ecore_getopt.c:1183 msgid "value has no pointer set.\n" msgstr "hodnota nemá nastaven pointer.\n" -#: src/lib/ecore/ecore_getopt.c:868 src/lib/ecore/ecore_getopt.c:1058 +#: src/lib/ecore/ecore_getopt.c:867 src/lib/ecore/ecore_getopt.c:1057 #, c-format msgid "unknown boolean value %s.\n" msgstr "neznámá boolean hodnota %s.\n" -#: src/lib/ecore/ecore_getopt.c:912 src/lib/ecore/ecore_getopt.c:1138 +#: src/lib/ecore/ecore_getopt.c:911 src/lib/ecore/ecore_getopt.c:1137 #, c-format msgid "invalid number format %s\n" msgstr "neznámý číselný formát %s\n" -#: src/lib/ecore/ecore_getopt.c:1007 +#: src/lib/ecore/ecore_getopt.c:1006 #, c-format msgid "invalid choice \"%s\". Valid values are: " msgstr "neznámá volba \"%s\". Možné hodnoty jsou: " -#: src/lib/ecore/ecore_getopt.c:1032 +#: src/lib/ecore/ecore_getopt.c:1031 msgid "missing parameter to append.\n" msgstr "chybějící parametr k připojení.\n" -#: src/lib/ecore/ecore_getopt.c:1128 +#: src/lib/ecore/ecore_getopt.c:1127 msgid "could not parse value.\n" msgstr "nemůžu parsovat hodnotu.\n" -#: src/lib/ecore/ecore_getopt.c:1177 +#: src/lib/ecore/ecore_getopt.c:1176 msgid "missing parameter.\n" msgstr "chybějící parametr.\n" -#: src/lib/ecore/ecore_getopt.c:1191 +#: src/lib/ecore/ecore_getopt.c:1190 msgid "missing callback function!\n" msgstr "chybějící callback funkce!\n" -#: src/lib/ecore/ecore_getopt.c:1214 +#: src/lib/ecore/ecore_getopt.c:1213 msgid "no version was defined.\n" msgstr "nebyla definována verze.\n" -#: src/lib/ecore/ecore_getopt.c:1228 +#: src/lib/ecore/ecore_getopt.c:1227 msgid "no copyright was defined.\n" msgstr "nebyl definován copyright.\n" -#: src/lib/ecore/ecore_getopt.c:1242 +#: src/lib/ecore/ecore_getopt.c:1241 msgid "no license was defined.\n" msgstr "nebyla definována licence.\n" -#: src/lib/ecore/ecore_getopt.c:1296 +#: src/lib/ecore/ecore_getopt.c:1295 #, c-format msgid "ERROR: unknown option --%s, ignored.\n" msgstr "CHYBA: neznámá volba --%s, ignoruji.\n" -#: src/lib/ecore/ecore_getopt.c:1329 +#: src/lib/ecore/ecore_getopt.c:1328 #, c-format msgid "ERROR: option --%s requires an argument!\n" msgstr "CHYBA: volba --%s vyžaduje argument!\n" -#: src/lib/ecore/ecore_getopt.c:1365 +#: src/lib/ecore/ecore_getopt.c:1364 #, c-format msgid "ERROR: unknown option -%c, ignored.\n" msgstr "CHYBA: neznámá volba -%c, ignoruji.\n" -#: src/lib/ecore/ecore_getopt.c:1403 +#: src/lib/ecore/ecore_getopt.c:1402 #, c-format msgid "ERROR: option -%c requires an argument!\n" msgstr "CHYBA: volba -%c vyžaduje argument!\n" -#: src/lib/ecore/ecore_getopt.c:1606 +#: src/lib/ecore/ecore_getopt.c:1605 msgid "ERROR: no parser provided.\n" msgstr "CHYBA: nebyl poskytnut parser.\n" -#: src/lib/ecore/ecore_getopt.c:1611 +#: src/lib/ecore/ecore_getopt.c:1610 msgid "ERROR: no values provided.\n" msgstr "CHYBA: nebyly poskytnuty hodnoty.\n" -#: src/lib/ecore/ecore_getopt.c:1620 +#: src/lib/ecore/ecore_getopt.c:1619 msgid "ERROR: no arguments provided.\n" msgstr "CHYBA: nebyly poskytnuty argumenty.\n" -#: src/lib/ecore/ecore_getopt.c:1646 +#: src/lib/ecore/ecore_getopt.c:1645 msgid "ERROR: invalid options found." msgstr "CHYBA: nalezeny neplatné volby." -#: src/lib/ecore/ecore_getopt.c:1652 +#: src/lib/ecore/ecore_getopt.c:1651 #, c-format msgid " See --%s.\n" msgstr " viz. --%s.\n" -#: src/lib/ecore/ecore_getopt.c:1654 +#: src/lib/ecore/ecore_getopt.c:1653 #, c-format msgid " See -%c.\n" msgstr " viz. -%c.\n" -#: src/lib/ecore/ecore_getopt.c:1691 +#: src/lib/ecore/ecore_getopt.c:1690 #, c-format msgid "ERROR: incorrect geometry value '%s'\n" msgstr "CHYBA: neplatná hodnota geometrie '%s'\n" -#: src/lib/ecore/ecore_getopt.c:1714 +#: src/lib/ecore/ecore_getopt.c:1713 #, c-format msgid "ERROR: incorrect size value '%s'\n" msgstr "CHYBA: neplatná hodnota velikosti '%s'\n" diff --git a/po/de.po b/po/de.po index cfd4d02..0b56b0e 100644 --- a/po/de.po +++ b/po/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ecore 0.9.9.063-2\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2009-10-28 11:13+1100\n" +"POT-Creation-Date: 2010-01-16 17:27+0800\n" "PO-Revision-Date: 2010-01-03 21:52+GMT\n" "Last-Translator: Chris Leick \n" "Language-Team: German \n" @@ -15,7 +15,6 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" - #: src/lib/ecore/ecore_getopt.c:73 msgid "Version:" msgstr "Version:" @@ -63,112 +62,112 @@ msgstr "FEHLER: Unbekannte Option --%s\n" msgid "ERROR: unknown option -%c.\n" msgstr "FEHLER: Unbekannte Option -%c\n" -#: src/lib/ecore/ecore_getopt.c:762 +#: src/lib/ecore/ecore_getopt.c:761 msgid "ERROR: " msgstr "FEHLER: " -#: src/lib/ecore/ecore_getopt.c:839 src/lib/ecore/ecore_getopt.c:955 -#: src/lib/ecore/ecore_getopt.c:968 src/lib/ecore/ecore_getopt.c:980 -#: src/lib/ecore/ecore_getopt.c:994 src/lib/ecore/ecore_getopt.c:1038 -#: src/lib/ecore/ecore_getopt.c:1147 src/lib/ecore/ecore_getopt.c:1184 +#: src/lib/ecore/ecore_getopt.c:838 src/lib/ecore/ecore_getopt.c:954 +#: src/lib/ecore/ecore_getopt.c:967 src/lib/ecore/ecore_getopt.c:979 +#: src/lib/ecore/ecore_getopt.c:993 src/lib/ecore/ecore_getopt.c:1037 +#: src/lib/ecore/ecore_getopt.c:1146 src/lib/ecore/ecore_getopt.c:1183 msgid "value has no pointer set.\n" msgstr "kein Zeiger auf Wert gesetzt\n" -#: src/lib/ecore/ecore_getopt.c:868 src/lib/ecore/ecore_getopt.c:1058 +#: src/lib/ecore/ecore_getopt.c:867 src/lib/ecore/ecore_getopt.c:1057 #, c-format msgid "unknown boolean value %s.\n" msgstr "unbekannter boolescher Wert %s\n" -#: src/lib/ecore/ecore_getopt.c:912 src/lib/ecore/ecore_getopt.c:1138 +#: src/lib/ecore/ecore_getopt.c:911 src/lib/ecore/ecore_getopt.c:1137 #, c-format msgid "invalid number format %s\n" msgstr "ungültiges Zahlenformat %s\n" -#: src/lib/ecore/ecore_getopt.c:1007 +#: src/lib/ecore/ecore_getopt.c:1006 #, c-format msgid "invalid choice \"%s\". Valid values are: " msgstr "ungültige Auswahl »%s«. Gültige Werte sind: " -#: src/lib/ecore/ecore_getopt.c:1032 +#: src/lib/ecore/ecore_getopt.c:1031 msgid "missing parameter to append.\n" msgstr "fehlender Parameter zum Anhängen\n" -#: src/lib/ecore/ecore_getopt.c:1128 +#: src/lib/ecore/ecore_getopt.c:1127 msgid "could not parse value.\n" msgstr "Wert kann nicht ausgewertet werden\n" -#: src/lib/ecore/ecore_getopt.c:1177 +#: src/lib/ecore/ecore_getopt.c:1176 msgid "missing parameter.\n" msgstr "fehlender Parameter\n" -#: src/lib/ecore/ecore_getopt.c:1191 +#: src/lib/ecore/ecore_getopt.c:1190 msgid "missing callback function!\n" msgstr "fehlende Rückruffunktion!\n" -#: src/lib/ecore/ecore_getopt.c:1214 +#: src/lib/ecore/ecore_getopt.c:1213 msgid "no version was defined.\n" msgstr "es wurde keine Version definiert.\n" -#: src/lib/ecore/ecore_getopt.c:1228 +#: src/lib/ecore/ecore_getopt.c:1227 msgid "no copyright was defined.\n" msgstr "es wurde kein Copyright definiert.\n" -#: src/lib/ecore/ecore_getopt.c:1242 +#: src/lib/ecore/ecore_getopt.c:1241 msgid "no license was defined.\n" msgstr "es wurde keine Lizenz definiert.\n" -#: src/lib/ecore/ecore_getopt.c:1296 +#: src/lib/ecore/ecore_getopt.c:1295 #, c-format msgid "ERROR: unknown option --%s, ignored.\n" msgstr "FEHLER: Unbekannte Option --%s, ignoriert\n" -#: src/lib/ecore/ecore_getopt.c:1329 +#: src/lib/ecore/ecore_getopt.c:1328 #, c-format msgid "ERROR: option --%s requires an argument!\n" msgstr "FEHLER: Option --%s benötigt ein Argument!\n" -#: src/lib/ecore/ecore_getopt.c:1365 +#: src/lib/ecore/ecore_getopt.c:1364 #, c-format msgid "ERROR: unknown option -%c, ignored.\n" msgstr "FEHLER: Unbekannte Option -%c, ignoriert\n" -#: src/lib/ecore/ecore_getopt.c:1403 +#: src/lib/ecore/ecore_getopt.c:1402 #, c-format msgid "ERROR: option -%c requires an argument!\n" msgstr "FEHLER: Option -%c benötigt ein Argument!\n" -#: src/lib/ecore/ecore_getopt.c:1606 +#: src/lib/ecore/ecore_getopt.c:1605 msgid "ERROR: no parser provided.\n" msgstr "FEHLER: Kein Parser bereitgestellt\n" -#: src/lib/ecore/ecore_getopt.c:1611 +#: src/lib/ecore/ecore_getopt.c:1610 msgid "ERROR: no values provided.\n" msgstr "FEHLER: Keine Werte bereitgestellt\n" -#: src/lib/ecore/ecore_getopt.c:1620 +#: src/lib/ecore/ecore_getopt.c:1619 msgid "ERROR: no arguments provided.\n" msgstr "FEHLER: Keine Argumente bereitgestellt\n" -#: src/lib/ecore/ecore_getopt.c:1646 +#: src/lib/ecore/ecore_getopt.c:1645 msgid "ERROR: invalid options found." msgstr "FEHLER: Ungültige Optionen gefunden" -#: src/lib/ecore/ecore_getopt.c:1652 +#: src/lib/ecore/ecore_getopt.c:1651 #, c-format msgid " See --%s.\n" msgstr " Siehe --%s\n" -#: src/lib/ecore/ecore_getopt.c:1654 +#: src/lib/ecore/ecore_getopt.c:1653 #, c-format msgid " See -%c.\n" msgstr " Siehe -%c\n" -#: src/lib/ecore/ecore_getopt.c:1691 +#: src/lib/ecore/ecore_getopt.c:1690 #, c-format msgid "ERROR: incorrect geometry value '%s'\n" msgstr "FEHLER: Falscher Geometriewert »%s«\n" -#: src/lib/ecore/ecore_getopt.c:1714 +#: src/lib/ecore/ecore_getopt.c:1713 #, c-format msgid "ERROR: incorrect size value '%s'\n" msgstr "FEHLER: Falscher Größenwert »%s«\n" diff --git a/po/el.po b/po/el.po index 3cd5ee1..795ac24 100644 --- a/po/el.po +++ b/po/el.po @@ -6,13 +6,13 @@ msgid "" msgstr "" "Project-Id-Version: Ecore\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2009-10-28 11:13+1100\n" +"POT-Creation-Date: 2010-01-16 17:27+0800\n" "PO-Revision-Date: 2009-12-15 00:56+0200\n" +"Last-Translator: Giorgos Koutsikos \n" "Language-Team: Greek\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Last-Translator: Giorgos Koutsikos \n" #: src/lib/ecore/ecore_getopt.c:73 msgid "Version:" @@ -61,118 +61,112 @@ msgstr "ΣΦΑΛΜΑ: άγνωστη παράμετρος --%s.\n" msgid "ERROR: unknown option -%c.\n" msgstr "ΣΦΑΛΜΑ: άγνωστη παράμετρος -%c.\n" -#: src/lib/ecore/ecore_getopt.c:762 +#: src/lib/ecore/ecore_getopt.c:761 msgid "ERROR: " msgstr "ΣΦΑΛΜΑ:" -#: src/lib/ecore/ecore_getopt.c:839 -#: src/lib/ecore/ecore_getopt.c:955 -#: src/lib/ecore/ecore_getopt.c:968 -#: src/lib/ecore/ecore_getopt.c:980 -#: src/lib/ecore/ecore_getopt.c:994 -#: src/lib/ecore/ecore_getopt.c:1038 -#: src/lib/ecore/ecore_getopt.c:1147 -#: src/lib/ecore/ecore_getopt.c:1184 +#: src/lib/ecore/ecore_getopt.c:838 src/lib/ecore/ecore_getopt.c:954 +#: src/lib/ecore/ecore_getopt.c:967 src/lib/ecore/ecore_getopt.c:979 +#: src/lib/ecore/ecore_getopt.c:993 src/lib/ecore/ecore_getopt.c:1037 +#: src/lib/ecore/ecore_getopt.c:1146 src/lib/ecore/ecore_getopt.c:1183 msgid "value has no pointer set.\n" msgstr "η τιμή δεν έχει δείκτη ορισμένο.\n" -#: src/lib/ecore/ecore_getopt.c:868 -#: src/lib/ecore/ecore_getopt.c:1058 +#: src/lib/ecore/ecore_getopt.c:867 src/lib/ecore/ecore_getopt.c:1057 #, c-format msgid "unknown boolean value %s.\n" msgstr "άγνωστη τιμή boolean %s.\n" -#: src/lib/ecore/ecore_getopt.c:912 -#: src/lib/ecore/ecore_getopt.c:1138 +#: src/lib/ecore/ecore_getopt.c:911 src/lib/ecore/ecore_getopt.c:1137 #, c-format msgid "invalid number format %s\n" msgstr "άγνωστη μορφή αριθμού %s\n" -#: src/lib/ecore/ecore_getopt.c:1007 +#: src/lib/ecore/ecore_getopt.c:1006 #, c-format msgid "invalid choice \"%s\". Valid values are: " msgstr "μη-έγκυρη επιλογή \"%s\". Οι τιμές είναι: " -#: src/lib/ecore/ecore_getopt.c:1032 +#: src/lib/ecore/ecore_getopt.c:1031 msgid "missing parameter to append.\n" msgstr "ελλιπής παράμετρος προς επισύναψη.\n" -#: src/lib/ecore/ecore_getopt.c:1128 +#: src/lib/ecore/ecore_getopt.c:1127 msgid "could not parse value.\n" msgstr "" -#: src/lib/ecore/ecore_getopt.c:1177 +#: src/lib/ecore/ecore_getopt.c:1176 msgid "missing parameter.\n" msgstr "ελλιπής παράμετρος.\n" -#: src/lib/ecore/ecore_getopt.c:1191 +#: src/lib/ecore/ecore_getopt.c:1190 msgid "missing callback function!\n" msgstr "" -#: src/lib/ecore/ecore_getopt.c:1214 +#: src/lib/ecore/ecore_getopt.c:1213 msgid "no version was defined.\n" msgstr "δεν έχει οριστεί έκδοση.\n" -#: src/lib/ecore/ecore_getopt.c:1228 +#: src/lib/ecore/ecore_getopt.c:1227 msgid "no copyright was defined.\n" msgstr "δεν έχουν οριστεί πνευματικά δικαιώματα.\n" -#: src/lib/ecore/ecore_getopt.c:1242 +#: src/lib/ecore/ecore_getopt.c:1241 msgid "no license was defined.\n" msgstr "δεν έχει οριστεί άδεια.\n" -#: src/lib/ecore/ecore_getopt.c:1296 +#: src/lib/ecore/ecore_getopt.c:1295 #, c-format msgid "ERROR: unknown option --%s, ignored.\n" msgstr "" -#: src/lib/ecore/ecore_getopt.c:1329 +#: src/lib/ecore/ecore_getopt.c:1328 #, c-format msgid "ERROR: option --%s requires an argument!\n" msgstr "" -#: src/lib/ecore/ecore_getopt.c:1365 +#: src/lib/ecore/ecore_getopt.c:1364 #, c-format msgid "ERROR: unknown option -%c, ignored.\n" msgstr "" -#: src/lib/ecore/ecore_getopt.c:1403 +#: src/lib/ecore/ecore_getopt.c:1402 #, c-format msgid "ERROR: option -%c requires an argument!\n" msgstr "" -#: src/lib/ecore/ecore_getopt.c:1606 +#: src/lib/ecore/ecore_getopt.c:1605 msgid "ERROR: no parser provided.\n" msgstr "" -#: src/lib/ecore/ecore_getopt.c:1611 +#: src/lib/ecore/ecore_getopt.c:1610 msgid "ERROR: no values provided.\n" msgstr "" -#: src/lib/ecore/ecore_getopt.c:1620 +#: src/lib/ecore/ecore_getopt.c:1619 msgid "ERROR: no arguments provided.\n" msgstr "" -#: src/lib/ecore/ecore_getopt.c:1646 +#: src/lib/ecore/ecore_getopt.c:1645 msgid "ERROR: invalid options found." msgstr "" -#: src/lib/ecore/ecore_getopt.c:1652 +#: src/lib/ecore/ecore_getopt.c:1651 #, c-format msgid " See --%s.\n" msgstr " Δες --%s.\n" -#: src/lib/ecore/ecore_getopt.c:1654 +#: src/lib/ecore/ecore_getopt.c:1653 #, c-format msgid " See -%c.\n" msgstr " Δες -%c.\n" -#: src/lib/ecore/ecore_getopt.c:1691 +#: src/lib/ecore/ecore_getopt.c:1690 #, c-format msgid "ERROR: incorrect geometry value '%s'\n" msgstr "" -#: src/lib/ecore/ecore_getopt.c:1714 +#: src/lib/ecore/ecore_getopt.c:1713 #, c-format msgid "ERROR: incorrect size value '%s'\n" msgstr "" @@ -183,20 +177,27 @@ msgstr "" #~ msgstr "" #~ "\n" #~ " " + #~ msgid "true" #~ msgstr "true" + #~ msgid "false" #~ msgstr "false" + #~ msgid "f" #~ msgstr "f" + #~ msgid "no" #~ msgstr "no" + #~ msgid "off" #~ msgstr "off" + #~ msgid "t" #~ msgstr "t" + #~ msgid "yes" #~ msgstr "yes" + #~ msgid "on" #~ msgstr "on" - diff --git a/po/fr.po b/po/fr.po index 3ce9cda..db3b082 100644 --- a/po/fr.po +++ b/po/fr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Ecore\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2009-10-28 11:13+1100\n" +"POT-Creation-Date: 2010-01-16 17:27+0800\n" "PO-Revision-Date: 2009-10-27 19:36+0100\n" "Last-Translator: quaker66 \n" "Language-Team: French \n" @@ -62,112 +62,112 @@ msgstr "ERREUR: option inconnue --%s.\n" msgid "ERROR: unknown option -%c.\n" msgstr "ERREUR: option inconnue -%c.\n" -#: src/lib/ecore/ecore_getopt.c:762 +#: src/lib/ecore/ecore_getopt.c:761 msgid "ERROR: " msgstr "ERREUR:" -#: src/lib/ecore/ecore_getopt.c:839 src/lib/ecore/ecore_getopt.c:955 -#: src/lib/ecore/ecore_getopt.c:968 src/lib/ecore/ecore_getopt.c:980 -#: src/lib/ecore/ecore_getopt.c:994 src/lib/ecore/ecore_getopt.c:1038 -#: src/lib/ecore/ecore_getopt.c:1147 src/lib/ecore/ecore_getopt.c:1184 +#: src/lib/ecore/ecore_getopt.c:838 src/lib/ecore/ecore_getopt.c:954 +#: src/lib/ecore/ecore_getopt.c:967 src/lib/ecore/ecore_getopt.c:979 +#: src/lib/ecore/ecore_getopt.c:993 src/lib/ecore/ecore_getopt.c:1037 +#: src/lib/ecore/ecore_getopt.c:1146 src/lib/ecore/ecore_getopt.c:1183 msgid "value has no pointer set.\n" msgstr "la valeur n'a aucun pointeur défini.\n" -#: src/lib/ecore/ecore_getopt.c:868 src/lib/ecore/ecore_getopt.c:1058 +#: src/lib/ecore/ecore_getopt.c:867 src/lib/ecore/ecore_getopt.c:1057 #, c-format msgid "unknown boolean value %s.\n" msgstr "valeur booléenne inconnue %s.\n" -#: src/lib/ecore/ecore_getopt.c:912 src/lib/ecore/ecore_getopt.c:1138 +#: src/lib/ecore/ecore_getopt.c:911 src/lib/ecore/ecore_getopt.c:1137 #, c-format msgid "invalid number format %s\n" msgstr "format du nombre non valide %s\n" -#: src/lib/ecore/ecore_getopt.c:1007 +#: src/lib/ecore/ecore_getopt.c:1006 #, c-format msgid "invalid choice \"%s\". Valid values are: " msgstr "choix non valide \"%s\". Les valeurs valides sont: " -#: src/lib/ecore/ecore_getopt.c:1032 +#: src/lib/ecore/ecore_getopt.c:1031 msgid "missing parameter to append.\n" msgstr "paramètre à ajouter manquant.\n" -#: src/lib/ecore/ecore_getopt.c:1128 +#: src/lib/ecore/ecore_getopt.c:1127 msgid "could not parse value.\n" msgstr "analyse de la valeur impossible.\n" -#: src/lib/ecore/ecore_getopt.c:1177 +#: src/lib/ecore/ecore_getopt.c:1176 msgid "missing parameter.\n" msgstr "paramètre manquant.\n" -#: src/lib/ecore/ecore_getopt.c:1191 +#: src/lib/ecore/ecore_getopt.c:1190 msgid "missing callback function!\n" msgstr "fonction de rappel manquante !\n" -#: src/lib/ecore/ecore_getopt.c:1214 +#: src/lib/ecore/ecore_getopt.c:1213 msgid "no version was defined.\n" msgstr "aucune version n'est définie.\n" -#: src/lib/ecore/ecore_getopt.c:1228 +#: src/lib/ecore/ecore_getopt.c:1227 msgid "no copyright was defined.\n" msgstr "aucun copyright n'est défini.\n" -#: src/lib/ecore/ecore_getopt.c:1242 +#: src/lib/ecore/ecore_getopt.c:1241 msgid "no license was defined.\n" msgstr "aucune licence n'est définie.\n" -#: src/lib/ecore/ecore_getopt.c:1296 +#: src/lib/ecore/ecore_getopt.c:1295 #, c-format msgid "ERROR: unknown option --%s, ignored.\n" msgstr "ERREUR: option inconnue --%s, non prise en compte.\n" -#: src/lib/ecore/ecore_getopt.c:1329 +#: src/lib/ecore/ecore_getopt.c:1328 #, c-format msgid "ERROR: option --%s requires an argument!\n" msgstr "ERREUR: l'option --%s requiert un argument !\n" -#: src/lib/ecore/ecore_getopt.c:1365 +#: src/lib/ecore/ecore_getopt.c:1364 #, c-format msgid "ERROR: unknown option -%c, ignored.\n" msgstr "ERREUR: option inconnue -%c, non prise en compte.\n" -#: src/lib/ecore/ecore_getopt.c:1403 +#: src/lib/ecore/ecore_getopt.c:1402 #, c-format msgid "ERROR: option -%c requires an argument!\n" msgstr "ERREUR: l'option -%c requiert un argument !\n" -#: src/lib/ecore/ecore_getopt.c:1606 +#: src/lib/ecore/ecore_getopt.c:1605 msgid "ERROR: no parser provided.\n" msgstr "ERREUR: aucun analyseur n'est fourni.\n" -#: src/lib/ecore/ecore_getopt.c:1611 +#: src/lib/ecore/ecore_getopt.c:1610 msgid "ERROR: no values provided.\n" msgstr "ERREUR: aucune valeur n'est fournie.\n" -#: src/lib/ecore/ecore_getopt.c:1620 +#: src/lib/ecore/ecore_getopt.c:1619 msgid "ERROR: no arguments provided.\n" msgstr "ERREUR: aucun argument n'est fourni.\n" -#: src/lib/ecore/ecore_getopt.c:1646 +#: src/lib/ecore/ecore_getopt.c:1645 msgid "ERROR: invalid options found." msgstr "ERREUR: options non valides détectées." -#: src/lib/ecore/ecore_getopt.c:1652 +#: src/lib/ecore/ecore_getopt.c:1651 #, c-format msgid " See --%s.\n" msgstr " Voir --%s.\n" -#: src/lib/ecore/ecore_getopt.c:1654 +#: src/lib/ecore/ecore_getopt.c:1653 #, c-format msgid " See -%c.\n" msgstr " Voir -%c.\n" -#: src/lib/ecore/ecore_getopt.c:1691 +#: src/lib/ecore/ecore_getopt.c:1690 #, c-format msgid "ERROR: incorrect geometry value '%s'\n" msgstr "ERREUR: valeur géométrique incorrecte '%s'\n" -#: src/lib/ecore/ecore_getopt.c:1714 +#: src/lib/ecore/ecore_getopt.c:1713 #, c-format msgid "ERROR: incorrect size value '%s'\n" msgstr "ERREUR: valeur de taille incorrecte '%s'\n" diff --git a/po/it.po b/po/it.po index 294b166..b2f60a4 100644 --- a/po/it.po +++ b/po/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Ecore\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2009-10-28 11:13+1100\n" +"POT-Creation-Date: 2010-01-16 17:27+0800\n" "PO-Revision-Date: 2009-10-27 19:36+0100\n" "Last-Translator: quaker66 \n" "Language-Team: none\n" @@ -61,112 +61,112 @@ msgstr "ERRORE: opzione sconosciuta --%s.\n" msgid "ERROR: unknown option -%c.\n" msgstr "ERRORE: opzione sconosciuta -%c.\n" -#: src/lib/ecore/ecore_getopt.c:762 +#: src/lib/ecore/ecore_getopt.c:761 msgid "ERROR: " msgstr "ERRORE:" -#: src/lib/ecore/ecore_getopt.c:839 src/lib/ecore/ecore_getopt.c:955 -#: src/lib/ecore/ecore_getopt.c:968 src/lib/ecore/ecore_getopt.c:980 -#: src/lib/ecore/ecore_getopt.c:994 src/lib/ecore/ecore_getopt.c:1038 -#: src/lib/ecore/ecore_getopt.c:1147 src/lib/ecore/ecore_getopt.c:1184 +#: src/lib/ecore/ecore_getopt.c:838 src/lib/ecore/ecore_getopt.c:954 +#: src/lib/ecore/ecore_getopt.c:967 src/lib/ecore/ecore_getopt.c:979 +#: src/lib/ecore/ecore_getopt.c:993 src/lib/ecore/ecore_getopt.c:1037 +#: src/lib/ecore/ecore_getopt.c:1146 src/lib/ecore/ecore_getopt.c:1183 msgid "value has no pointer set.\n" msgstr "il valore non ha puntatori impostati.\n" -#: src/lib/ecore/ecore_getopt.c:868 src/lib/ecore/ecore_getopt.c:1058 +#: src/lib/ecore/ecore_getopt.c:867 src/lib/ecore/ecore_getopt.c:1057 #, c-format msgid "unknown boolean value %s.\n" msgstr "valore booleano sconosciuto %s.\n" -#: src/lib/ecore/ecore_getopt.c:912 src/lib/ecore/ecore_getopt.c:1138 +#: src/lib/ecore/ecore_getopt.c:911 src/lib/ecore/ecore_getopt.c:1137 #, c-format msgid "invalid number format %s\n" msgstr "formato numero non valido %s\n" -#: src/lib/ecore/ecore_getopt.c:1007 +#: src/lib/ecore/ecore_getopt.c:1006 #, c-format msgid "invalid choice \"%s\". Valid values are: " msgstr "scelta non valida \"%s\". I valori ammessi sono: " -#: src/lib/ecore/ecore_getopt.c:1032 +#: src/lib/ecore/ecore_getopt.c:1031 msgid "missing parameter to append.\n" msgstr "parametro da appendere mancante.\n" -#: src/lib/ecore/ecore_getopt.c:1128 +#: src/lib/ecore/ecore_getopt.c:1127 msgid "could not parse value.\n" msgstr "impossibile il parsing del valore.\n" -#: src/lib/ecore/ecore_getopt.c:1177 +#: src/lib/ecore/ecore_getopt.c:1176 msgid "missing parameter.\n" msgstr "parametro mancante.\n" -#: src/lib/ecore/ecore_getopt.c:1191 +#: src/lib/ecore/ecore_getopt.c:1190 msgid "missing callback function!\n" msgstr "funzione callback mancante!\n" -#: src/lib/ecore/ecore_getopt.c:1214 +#: src/lib/ecore/ecore_getopt.c:1213 msgid "no version was defined.\n" msgstr "nessuna versione definita.\n" -#: src/lib/ecore/ecore_getopt.c:1228 +#: src/lib/ecore/ecore_getopt.c:1227 msgid "no copyright was defined.\n" msgstr "nessun copyright definito.\n" -#: src/lib/ecore/ecore_getopt.c:1242 +#: src/lib/ecore/ecore_getopt.c:1241 msgid "no license was defined.\n" msgstr "nessuna licenza definita.\n" -#: src/lib/ecore/ecore_getopt.c:1296 +#: src/lib/ecore/ecore_getopt.c:1295 #, c-format msgid "ERROR: unknown option --%s, ignored.\n" msgstr "ERRORE: opzione sconosciuta --%s, ignorata.\n" -#: src/lib/ecore/ecore_getopt.c:1329 +#: src/lib/ecore/ecore_getopt.c:1328 #, c-format msgid "ERROR: option --%s requires an argument!\n" msgstr "ERRORE: l'opzione --%s richiede un argomento!\n" -#: src/lib/ecore/ecore_getopt.c:1365 +#: src/lib/ecore/ecore_getopt.c:1364 #, c-format msgid "ERROR: unknown option -%c, ignored.\n" msgstr "ERRORE: opzione sconosciuta -%c, ignorata.\n" -#: src/lib/ecore/ecore_getopt.c:1403 +#: src/lib/ecore/ecore_getopt.c:1402 #, c-format msgid "ERROR: option -%c requires an argument!\n" msgstr "ERRORE: l'opzione -%c richiede un argomento!\n" -#: src/lib/ecore/ecore_getopt.c:1606 +#: src/lib/ecore/ecore_getopt.c:1605 msgid "ERROR: no parser provided.\n" msgstr "ERRORE: nessun parser fornito.\n" -#: src/lib/ecore/ecore_getopt.c:1611 +#: src/lib/ecore/ecore_getopt.c:1610 msgid "ERROR: no values provided.\n" msgstr "ERRORE: nessun valore fornito.\n" -#: src/lib/ecore/ecore_getopt.c:1620 +#: src/lib/ecore/ecore_getopt.c:1619 msgid "ERROR: no arguments provided.\n" msgstr "ERRORE: nessun argomento fornito.\n" -#: src/lib/ecore/ecore_getopt.c:1646 +#: src/lib/ecore/ecore_getopt.c:1645 msgid "ERROR: invalid options found." msgstr "ERRORE: trovate opzioni non valide." -#: src/lib/ecore/ecore_getopt.c:1652 +#: src/lib/ecore/ecore_getopt.c:1651 #, c-format msgid " See --%s.\n" msgstr " Vedere --%s.\n" -#: src/lib/ecore/ecore_getopt.c:1654 +#: src/lib/ecore/ecore_getopt.c:1653 #, c-format msgid " See -%c.\n" msgstr " Vedere -%c.\n" -#: src/lib/ecore/ecore_getopt.c:1691 +#: src/lib/ecore/ecore_getopt.c:1690 #, c-format msgid "ERROR: incorrect geometry value '%s'\n" msgstr "ERRORE: valore geometrico non corretto '%s'\n" -#: src/lib/ecore/ecore_getopt.c:1714 +#: src/lib/ecore/ecore_getopt.c:1713 #, c-format msgid "ERROR: incorrect size value '%s'\n" msgstr "ERRORE: valore dimensione non corretto '%s'\n" diff --git a/src/lib/ecore_evas/ecore_evas_buffer.c b/src/lib/ecore_evas/ecore_evas_buffer.c index 43506bf..d82d364 100644 --- a/src/lib/ecore_evas/ecore_evas_buffer.c +++ b/src/lib/ecore_evas/ecore_evas_buffer.c @@ -220,6 +220,51 @@ _ecore_evas_buffer_cb_mouse_wheel(void *data, Evas *e __UNUSED__, Evas_Object *o } static void +_ecore_evas_buffer_cb_multi_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Ecore_Evas *ee; + Evas_Event_Multi_Down *ev; + Evas_Coord x, y; + + ee = data; + ev = event_info; + x = ev->canvas.x; + y = ev->canvas.y; + _ecore_evas_buffer_coord_translate(ee, &x, &y); + evas_event_feed_multi_down(ee->evas, ev->device, x, y, ev->radius, ev->radius_x, ev->radius_y, ev->flags, ev->timestamp, NULL); +} + +static void +_ecore_evas_buffer_cb_multi_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Ecore_Evas *ee; + Evas_Event_Multi_Up *ev; + Evas_Coord x, y; + + ee = data; + ev = event_info; + x = ev->canvas.x; + y = ev->canvas.y; + _ecore_evas_buffer_coord_translate(ee, &x, &y); + evas_event_feed_multi_up(ee->evas, ev->device, x, y, ev->radius, ev->radius_x, ev->radius_y, ev->flags, ev->timestamp, NULL); +} + +static void +_ecore_evas_buffer_cb_multi_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Ecore_Evas *ee; + Evas_Event_Multi_Move *ev; + Evas_Coord x, y; + + ee = data; + ev = event_info; + x = ev->cur.canvas.x; + y = ev->cur.canvas.y; + _ecore_evas_buffer_coord_translate(ee, &x, &y); + evas_event_feed_multi_move(ee->evas, ev->device, x, y, ev->radius, ev->radius_x, ev->radius_y, ev->timestamp, NULL); +} + +static void _ecore_evas_buffer_cb_free(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { Ecore_Evas *ee; @@ -587,6 +632,15 @@ ecore_evas_object_image_new(Ecore_Evas *ee_target) EVAS_CALLBACK_MOUSE_WHEEL, _ecore_evas_buffer_cb_mouse_wheel, ee); evas_object_event_callback_add(ee->engine.buffer.image, + EVAS_CALLBACK_MULTI_DOWN, + _ecore_evas_buffer_cb_multi_down, ee); + evas_object_event_callback_add(ee->engine.buffer.image, + EVAS_CALLBACK_MULTI_UP, + _ecore_evas_buffer_cb_multi_up, ee); + evas_object_event_callback_add(ee->engine.buffer.image, + EVAS_CALLBACK_MULTI_MOVE, + _ecore_evas_buffer_cb_multi_move, ee); + evas_object_event_callback_add(ee->engine.buffer.image, EVAS_CALLBACK_FREE, _ecore_evas_buffer_cb_free, ee); evas_object_event_callback_add(ee->engine.buffer.image, diff --git a/src/lib/ecore_evas/ecore_evas_x.c b/src/lib/ecore_evas/ecore_evas_x.c index 7c6f02e..1133cac 100644 --- a/src/lib/ecore_evas/ecore_evas_x.c +++ b/src/lib/ecore_evas/ecore_evas_x.c @@ -1508,6 +1508,7 @@ _ecore_evas_x_alpha_set(Ecore_Evas *ee, int alpha) evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo); evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h); ecore_x_window_shape_mask_set(ee->prop.window, 0); + ecore_x_input_multi_select(ee->prop.window); ecore_event_window_register(ee->prop.window, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb) _ecore_evas_mouse_move_process); if (ee->prop.borderless) ecore_x_mwm_borderless_set(ee->prop.window, ee->prop.borderless); @@ -1581,6 +1582,7 @@ _ecore_evas_x_alpha_set(Ecore_Evas *ee, int alpha) evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo); evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h); ecore_x_window_shape_mask_set(ee->prop.window, 0); + ecore_x_input_multi_select(ee->prop.window); ecore_event_window_register(ee->prop.window, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb) _ecore_evas_mouse_move_process); if (ee->prop.borderless) ecore_x_mwm_borderless_set(ee->prop.window, ee->prop.borderless); @@ -1647,6 +1649,7 @@ _ecore_evas_x_alpha_set(Ecore_Evas *ee, int alpha) evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo); evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h); ecore_x_window_shape_mask_set(ee->prop.window, 0); + ecore_x_input_multi_select(ee->prop.window); ecore_event_window_register(ee->prop.window, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb) _ecore_evas_mouse_move_process); if (ee->prop.borderless) ecore_x_mwm_borderless_set(ee->prop.window, ee->prop.borderless); @@ -2453,6 +2456,7 @@ ecore_evas_software_x11_new(const char *disp_name, Ecore_X_Window parent, ee->engine.func->fn_render = _ecore_evas_x_render; _ecore_evas_register(ee); + ecore_x_input_multi_select(ee->prop.window); ecore_event_window_register(ee->prop.window, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb) _ecore_evas_mouse_move_process); return ee; } @@ -2555,6 +2559,7 @@ ecore_evas_software_x11_extra_event_window_add(Ecore_Evas *ee, Ecore_X_Window wi { *winp = win; ee->engine.x.win_extra = eina_list_append(ee->engine.x.win_extra, winp); + ecore_x_input_multi_select(win); ecore_event_window_register(win, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb) _ecore_evas_mouse_move_process); } } @@ -2643,6 +2648,7 @@ ecore_evas_gl_x11_new(const char *disp_name, Ecore_X_Window parent, ee->engine.func->fn_render = _ecore_evas_x_render; _ecore_evas_register(ee); + ecore_x_input_multi_select(ee->prop.window); ecore_event_window_register(ee->prop.window, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb) _ecore_evas_mouse_move_process); # endif /* HAVE_ECORE_X_XCB */ @@ -2892,6 +2898,7 @@ ecore_evas_xrender_x11_new(const char *disp_name, Ecore_X_Window parent, ee->engine.func->fn_render = _ecore_evas_x_render; _ecore_evas_register(ee); + ecore_x_input_multi_select(ee->prop.window); ecore_event_window_register(ee->prop.window, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb) _ecore_evas_mouse_move_process); return ee; } @@ -3103,6 +3110,7 @@ ecore_evas_software_x11_16_new(const char *disp_name, Ecore_X_Window parent, ee->engine.func->fn_render = _ecore_evas_x_render; _ecore_evas_register(ee); + ecore_x_input_multi_select(ee->prop.window); ecore_event_window_register(ee->prop.window, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb) _ecore_evas_mouse_move_process); return ee; } @@ -3205,6 +3213,7 @@ ecore_evas_software_x11_16_extra_event_window_add(Ecore_Evas *ee, Ecore_X_Window { *winp = win; ee->engine.x.win_extra = eina_list_append(ee->engine.x.win_extra, winp); + ecore_x_input_multi_select(win); ecore_event_window_register(win, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb) _ecore_evas_mouse_move_process); } } diff --git a/src/lib/ecore_input/Ecore_Input.h b/src/lib/ecore_input/Ecore_Input.h index 62b7e5f..9f8d861 100644 --- a/src/lib/ecore_input/Ecore_Input.h +++ b/src/lib/ecore_input/Ecore_Input.h @@ -96,6 +96,11 @@ struct _Ecore_Event_Mouse_Button int x; int y; } root; + + int device; + int radius; + int radius_x; + int radius_y; }; typedef struct _Ecore_Event_Mouse_Wheel Ecore_Event_Mouse_Wheel; @@ -140,6 +145,11 @@ struct _Ecore_Event_Mouse_Move int x; int y; } root; + + int device; + int radius; + int radius_x; + int radius_y; }; typedef struct _Ecore_Event_Mouse_IO Ecore_Event_Mouse_IO; diff --git a/src/lib/ecore_input_evas/ecore_input_evas.c b/src/lib/ecore_input_evas/ecore_input_evas.c index 9221877..9d711e7 100644 --- a/src/lib/ecore_input_evas/ecore_input_evas.c +++ b/src/lib/ecore_input_evas/ecore_input_evas.c @@ -153,13 +153,20 @@ _ecore_event_evas_mouse_button(Ecore_Event_Mouse_Button *e, Ecore_Event_Press pr lookup = _ecore_event_window_match(e->window); if (!lookup) return 1; - ecore_event_evas_modifier_lock_update(lookup->evas, e->modifiers); if (e->double_click) flags |= EVAS_BUTTON_DOUBLE_CLICK; if (e->triple_click) flags |= EVAS_BUTTON_TRIPLE_CLICK; - if (press == ECORE_DOWN) - evas_event_feed_mouse_down(lookup->evas, e->buttons, flags, e->timestamp, NULL); + if (e->device == 0) + { + ecore_event_evas_modifier_lock_update(lookup->evas, e->modifiers); + if (press == ECORE_DOWN) + evas_event_feed_mouse_down(lookup->evas, e->buttons, flags, e->timestamp, NULL); + else + evas_event_feed_mouse_up(lookup->evas, e->buttons, flags, e->timestamp, NULL); + } else - evas_event_feed_mouse_up(lookup->evas, e->buttons, flags, e->timestamp, NULL); + { + // FIXME: multi-touch feed + } return 1; } @@ -235,8 +242,15 @@ ecore_event_evas_mouse_move(void *data __UNUSED__, int type __UNUSED__, void *ev e = event; lookup = _ecore_event_window_match(e->window); if (!lookup) return 1; - ecore_event_evas_modifier_lock_update(lookup->evas, e->modifiers); - lookup->move_mouse(lookup->window, e->x, e->y, e->timestamp); + if (e->device == 0) + { + ecore_event_evas_modifier_lock_update(lookup->evas, e->modifiers); + lookup->move_mouse(lookup->window, e->x, e->y, e->timestamp); + } + else + { + // FIXME: multi-touch feed + } return 1; } diff --git a/src/lib/ecore_x/Ecore_X.h b/src/lib/ecore_x/Ecore_X.h index dcd6008..5744fec 100644 --- a/src/lib/ecore_x/Ecore_X.h +++ b/src/lib/ecore_x/Ecore_X.h @@ -73,6 +73,8 @@ typedef Ecore_X_ID Ecore_X_Randr_Crtc; typedef Ecore_X_ID Ecore_X_Randr_Mode; typedef unsigned short Ecore_X_Randr_Size_ID; +typedef Ecore_X_ID Ecore_X_Device; + #ifdef __cplusplus extern "C" { #endif @@ -1820,6 +1822,8 @@ EAPI void ecore_x_image_free(Ecore_X_Image *im); EAPI void ecore_x_image_get(Ecore_X_Image *im, Ecore_X_Drawable draw, int x, int y, int sx, int sy, int w, int h); EAPI void ecore_x_image_put(Ecore_X_Image *im, Ecore_X_Drawable draw, int x, int y, int sx, int sy, int w, int h); EAPI void *ecore_x_image_data_get(Ecore_X_Image *im, int *bpl, int *rows, int *bpp); + +EAPI Eina_Bool ecore_x_input_multi_select(Ecore_X_Window win); #ifdef __cplusplus } diff --git a/src/lib/ecore_x/xlib/Makefile.am b/src/lib/ecore_x/xlib/Makefile.am index 5f1bb7d..44220d0 100644 --- a/src/lib/ecore_x/xlib/Makefile.am +++ b/src/lib/ecore_x/xlib/Makefile.am @@ -58,7 +58,8 @@ ecore_x_cursor.c \ ecore_x_test.c \ ecore_x_atoms.c \ ecore_x_region.c \ -ecore_x_image.c +ecore_x_image.c \ +ecore_x_xi2.c libecore_x_xlib_la_LIBADD = \ @Xcursor_libs@ \ diff --git a/src/lib/ecore_x/xlib/ecore_x_events.c b/src/lib/ecore_x/xlib/ecore_x_events.c index c9eb140..05183ee 100644 --- a/src/lib/ecore_x/xlib/ecore_x_events.c +++ b/src/lib/ecore_x/xlib/ecore_x_events.c @@ -199,7 +199,8 @@ _ecore_mouse_move(unsigned int timestamp, unsigned int xmodifiers, unsigned int event_window, unsigned int window, unsigned int root_win, - int same_screen) + int same_screen, + int dev, int radx, int rady) { Ecore_Event_Mouse_Move *e; Ecore_Event *event; @@ -219,6 +220,11 @@ _ecore_mouse_move(unsigned int timestamp, unsigned int xmodifiers, e->root.x = x_root; e->root.y = y_root; + e->device = dev; + e->radius = (radx + rady) / 2; + e->radius_x = radx; + e->radius_y = rady; + event = ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, _ecore_x_event_free_mouse_move, NULL); _ecore_x_event_last_time = timestamp; @@ -353,7 +359,8 @@ _ecore_mouse_button(int event, unsigned int event_window, unsigned int window, unsigned int root_win, - int same_screen) + int same_screen, + int dev, int radx, int rady) { Ecore_Event_Mouse_Button *e; @@ -402,6 +409,11 @@ _ecore_mouse_button(int event, && !e->double_click && !e->triple_click) _ecore_x_mouse_up_count = 0; + + e->device = dev; + e->radius = (radx + rady) / 2; + e->radius_x = radx; + e->radius_y = rady; _ecore_x_event_last_time = e->timestamp; _ecore_x_event_last_win = e->window; @@ -413,6 +425,10 @@ _ecore_mouse_button(int event, return e; } +#ifdef ECORE_XI2 +extern int _ecore_x_xi2_opcode; +#endif + void _ecore_x_event_handle_any_event(XEvent *xevent) { @@ -420,6 +436,72 @@ _ecore_x_event_handle_any_event(XEvent *xevent) memcpy(ev, xevent, sizeof(XEvent)); ecore_event_add(ECORE_X_EVENT_ANY, ev, NULL, NULL); + +#ifdef ECORE_XI2 + if (xevent->xcookie.type == GenericEvent && + xevent->xcookie.extension == opcode) + { + if (XGetEventData(_ecore_x_disp &(xevent->xcookie))) + { + XIDeviceEvent* evd = (XIDeviceEvent *)(xevent->xcookie.data); + int devid = evd->deviceid; + + //printf("deviceID = %d\n", devid); + switch (xevent->xcookie.evtype) + { + case XI_Motion: + _ecore_mouse_move + (xevent->xcookie.time, // ??? + 0, // state + evd->event_x, evd->event_y, + evd->root_x, evd->root_y, + xevent->xcookie.window, // ??? + (xevent->xbutton.subwindow ? xevent->xbutton.subwindow : xevent->xbutton.window), // ??? + xevent->xcookie.root, // ??? + xevent->xcookie.same_screen, // ??? + devid, 1, 1); + + //printf("motion\n"); + printf("="); + break; + case XI_ButtonPress: + _ecore_mouse_button + (ECORE_EVENT_MOUSE_BUTTON_DOWN, + (xevent->xcookie.time, // ??? + 0, // state + 0, // button + evd->event_x, evd->event_y, + evd->root_x, evd->root_y, + xevent->xcookie.window, // ??? + (xevent->xbutton.subwindow ? xevent->xbutton.subwindow : xevent->xbutton.window), // ??? + xevent->xcookie.root, // ??? + xevent->xcookie.same_screen, // ??? + devid, 1, 1); + //printf("abs X:%f Y:%f - ", evd->root_x, evd->root_y); + //printf("win X:%f Y:%f\n", evd->event_x, evd->event_y); + printf("[["); + break; + case XI_ButtonRelease: + _ecore_mouse_button + (ECORE_EVENT_MOUSE_BUTTON_UP, + (xevent->xcookie.time, // ??? + 0, // state + 0, // button + evd->event_x, evd->event_y, + evd->root_x, evd->root_y, + xevent->xcookie.window, // ??? + (xevent->xbutton.subwindow ? xevent->xbutton.subwindow : xevent->xbutton.window), // ??? + xevent->xcookie.root, // ??? + xevent->xcookie.same_screen, // ??? + devid, 1, 1); + //printf("unclick\n"); + printf("]]\n"); + break; + } + } + } + XFreeEventData(_ecore_x_disp &(xevent->xcookie)); +#endif } void @@ -505,7 +587,7 @@ _ecore_x_event_handle_button_press(XEvent *xevent) xevent->xbutton.window, (xevent->xbutton.subwindow ? xevent->xbutton.subwindow : xevent->xbutton.window), xevent->xbutton.root, - xevent->xbutton.same_screen); + xevent->xbutton.same_screen, 0, 1, 1); } { Ecore_Event_Mouse_Button *e; @@ -531,7 +613,8 @@ _ecore_x_event_handle_button_press(XEvent *xevent) xevent->xbutton.x, xevent->xbutton.y, xevent->xbutton.x_root, xevent->xbutton.y_root, event_window, window, - xevent->xbutton.root, xevent->xbutton.same_screen); + xevent->xbutton.root, xevent->xbutton.same_screen, + 0, 1, 1); if (e) for (i = 0; i < _ecore_window_grabs_num; i++) { @@ -586,7 +669,7 @@ _ecore_x_event_handle_button_release(XEvent *xevent) xevent->xbutton.window, (xevent->xbutton.subwindow ? xevent->xbutton.subwindow : xevent->xbutton.window), xevent->xbutton.root, - xevent->xbutton.same_screen); + xevent->xbutton.same_screen, 0, 1, 1); _ecore_mouse_button(ECORE_EVENT_MOUSE_BUTTON_UP, xevent->xbutton.time, xevent->xbutton.state, @@ -596,7 +679,8 @@ _ecore_x_event_handle_button_release(XEvent *xevent) xevent->xbutton.window, (xevent->xbutton.subwindow ? xevent->xbutton.subwindow : xevent->xbutton.window), xevent->xbutton.root, - xevent->xbutton.same_screen); + xevent->xbutton.same_screen, + 0, 1, 1); } } @@ -617,7 +701,7 @@ _ecore_x_event_handle_motion_notify(XEvent *xevent) xevent->xmotion.window, (xevent->xmotion.subwindow ? xevent->xmotion.subwindow : xevent->xmotion.window), xevent->xmotion.root, - xevent->xmotion.same_screen); + xevent->xmotion.same_screen, 0, 1, 1); _ecore_x_last_event_mouse_move = 1; @@ -636,7 +720,7 @@ _ecore_x_event_handle_enter_notify(XEvent *xevent) xevent->xcrossing.window, (xevent->xcrossing.subwindow ? xevent->xcrossing.subwindow : xevent->xcrossing.window), xevent->xcrossing.root, - xevent->xcrossing.same_screen); + xevent->xcrossing.same_screen, 0, 1, 1); } { Ecore_X_Event_Mouse_In *e; @@ -689,7 +773,7 @@ _ecore_x_event_handle_leave_notify(XEvent *xevent) xevent->xcrossing.window, (xevent->xcrossing.subwindow ? xevent->xcrossing.subwindow : xevent->xcrossing.window), xevent->xcrossing.root, - xevent->xcrossing.same_screen); + xevent->xcrossing.same_screen, 0, 1, 1); } { Ecore_X_Event_Mouse_Out *e; diff --git a/src/lib/ecore_x/xlib/ecore_x_private.h b/src/lib/ecore_x/xlib/ecore_x_private.h index 20f7530..b6dc2e2 100644 --- a/src/lib/ecore_x/xlib/ecore_x_private.h +++ b/src/lib/ecore_x/xlib/ecore_x_private.h @@ -50,6 +50,9 @@ #ifdef ECORE_XKB #include #endif +#ifdef ECORE_XI2 +#include +#endif #include "Ecore.h" #include "ecore_private.h" diff --git a/src/lib/ecore_x/xlib/ecore_x_xi2.c b/src/lib/ecore_x/xlib/ecore_x_xi2.c new file mode 100644 index 0000000..40307b4 --- /dev/null +++ b/src/lib/ecore_x/xlib/ecore_x_xi2.c @@ -0,0 +1,86 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + +#include "Ecore.h" +#include "ecore_x_private.h" +#include "Ecore_X.h" + +#ifdef ECORE_XI2 +int _ecore_x_xi2_opcode = -1; +#endif + +EAPI Eina_Bool +ecore_x_input_multi_select(Ecore_X_Window win) +{ +#ifdef ECORE_XI2 + int find = 0; + static int num; + static XIDeviceInfo *devs = NULL; + static int checked = 0; + static int check_ret = 1; + + if (!checked) + { + int event, error; + int major = 2, minor = 0; + + checked = 1; + if (!XQueryExtension(_ecore_x_disp, "XInputExtension", + &_ecore_x_xi2_opcode, &event, &error)) + { + _ecore_x_xi2_opcode = -1; + check_ret = 0; + return 0; + } + + if (XIQueryVersion(_ecore_x_disp, &major, &minor) == BadRequest) + { + _ecore_x_xi2_opcode = -1; + check_ret = 0; + return 0; + } + devs = XIQueryDevice(_ecore_x_disp, XIAllDevices, &num); +// XIFreeDeviceInfo(devs); + } + else + { + if (!check_ret) return 0; + } + + if (devs) + { + int i; + + for (i = 0; i < num; i++) + { + XIDeviceInfo *dev = &(devs[i]); + + if (dev->use == XIFloatingSlave) + { + XIEventMask eventmask; + unsigned char mask[1] = { 0 }; + + eventmask.deviceid = dev->deviceid; + eventmask.mask_len = sizeof(mask); + eventmask.mask = mask; + XISetMask(mask, XI_ButtonPress); + XISetMask(mask, XI_ButtonRelease); + XISetMask(mask, XI_Motion); + XISelectEvents(_ecore_x_disp, win, &eventmask, 1); + find = 1; + } + } + } + + return find; +#else + return 0; +#endif +} -- 2.7.4