multitouch support for xi2 and floating xi devices
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sat, 16 Jan 2010 12:20:56 +0000 (12:20 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sat, 16 Jan 2010 12:20:56 +0000 (12:20 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/ecore@45213 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

15 files changed:
configure.ac
po/cs.po
po/de.po
po/el.po
po/fr.po
po/it.po
src/lib/ecore_evas/ecore_evas_buffer.c
src/lib/ecore_evas/ecore_evas_x.c
src/lib/ecore_input/Ecore_Input.h
src/lib/ecore_input_evas/ecore_input_evas.c
src/lib/ecore_x/Ecore_X.h
src/lib/ecore_x/xlib/Makefile.am
src/lib/ecore_x/xlib/ecore_x_events.c
src/lib/ecore_x/xlib/ecore_x_private.h
src/lib/ecore_x/xlib/ecore_x_xi2.c [new file with mode: 0644]

index 8f04b6d..2265bda 100644 (file)
@@ -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"
index bfd46a4..8f9b913 100644 (file)
--- 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 <quaker66@gmail.com>\n"
 "Language-Team: cs <quaker66@gmail.com>\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"
index cfd4d02..0b56b0e 100644 (file)
--- 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 <c.leick@vollbio.de>\n"
 "Language-Team: German <debian-l10n-german@lists.debian.org>\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"
index 3cd5ee1..795ac24 100644 (file)
--- 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 <ragecryx@yahoo.gr>\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 <ragecryx@yahoo.gr>\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"
-
index 3ce9cda..db3b082 100644 (file)
--- 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 <quaker66@gmail.com>\n"
 "Language-Team: French <Enlightenment i18n 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"
index 294b166..b2f60a4 100644 (file)
--- 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 <quaker66@gmail.com>\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"
index 43506bf..d82d364 100644 (file)
@@ -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,
index 7c6f02e..1133cac 100644 (file)
@@ -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);
      }
 }
index 62b7e5f..9f8d861 100644 (file)
@@ -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;
index 9221877..9d711e7 100644 (file)
@@ -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;
 }
 
index dcd6008..5744fec 100644 (file)
@@ -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
 }
index 5f1bb7d..44220d0 100644 (file)
@@ -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@ \
index c9eb140..05183ee 100644 (file)
@@ -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;
index 20f7530..b6dc2e2 100644 (file)
@@ -50,6 +50,9 @@
 #ifdef ECORE_XKB
 #include <X11/XKBlib.h>
 #endif
+#ifdef ECORE_XI2
+#include <X11/extensions/XInput2.h>
+#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 (file)
index 0000000..40307b4
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+
+#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
+}