=== modified file 'include/geis/geis.h'
--- include/geis/geis.h	2011-10-14 17:45:23 +0000
+++ include/geis/geis.h	2011-11-22 20:39:25 +0000
@@ -1159,6 +1159,21 @@
                                             void              *context);
 
 /**
+ * Gets a cached device description for an identified device.
+ *
+ * @param[in]  geis      The GEIS API instance.
+ * @param[in]  device_id Identifies the device.
+ *
+ * The GEIS instance caches a list of gesture-capable input devices that have
+ * been reported.  The GeisDevice description for an identified device may be
+ * retrieved from that cache with this call.
+ *
+ * @returns a valid GeisDevice for the identified device, or NULL if no such
+ * device is in the cache.
+ */
+GEIS_API GeisDevice geis_get_device(Geis geis, GeisInteger device_id);
+
+/**
  * Adds a reference count to a device.
  * @memberof GeisDevice
  *

=== modified file 'libutouch-geis/Makefile.am'
--- libutouch-geis/Makefile.am	2011-10-04 02:53:52 +0000
+++ libutouch-geis/Makefile.am	2011-11-22 20:39:25 +0000
@@ -63,7 +63,7 @@
 
 libutouch_geis_la_LDFLAGS = \
 	-Wl,-z,defs -Wl,--as-needed \
-	-version-info 3:0:2 \
+	-version-info 4:0:3 \
 	-Wl,--version-script=$(version_script) \
 	-lm
 

=== modified file 'libutouch-geis/geis.c'
--- libutouch-geis/geis.c	2011-10-31 22:29:01 +0000
+++ libutouch-geis/geis.c	2011-11-22 20:39:25 +0000
@@ -1196,4 +1196,19 @@
   return GEIS_ATTR_TYPE_UNKNOWN;
 }
 
+GeisDevice
+geis_get_device(Geis geis, GeisInteger device_id)
+{
+  GeisDevice device = NULL;
+  for (GeisSize i = 0; i < geis_device_bag_count(geis->devices); ++i)
+  {
+    GeisDevice d = geis_device_bag_device(geis->devices, i);
+    if (geis_device_id(d) == device_id)
+    {
+      device = d;
+      break;
+    }
+  }
+  return device;
+}
 

=== modified file 'libutouch-geis/libutouch-geis.ver'
--- libutouch-geis/libutouch-geis.ver	2011-02-17 17:40:49 +0000
+++ libutouch-geis/libutouch-geis.ver	2011-11-22 20:39:25 +0000
@@ -88,6 +88,11 @@
     geis_touchset_touch;
     geis_touchset_touch_by_id;
     geis_touchset_touch_count;
+};
+
+GEIS_2.2 {
+  global:
+    geis_get_device;
 
   local:
     *;

=== modified file 'testsuite/geis2/Makefile.am'
--- testsuite/geis2/Makefile.am	2011-08-17 04:26:54 +0000
+++ testsuite/geis2/Makefile.am	2011-11-22 20:39:25 +0000
@@ -29,8 +29,7 @@
 	check_version_macro.c \
 	check_geis2_api.c
 
-check_geis2_api_CFLAGS = \
-	-Wall -Wextra -pedantic \
+check_geis2_api_CPPFLAGS = \
 	-Wno-unused \
 	-I$(top_srcdir) \
 	-I$(top_srcdir)/include \

=== modified file 'testsuite/geis2/check_device.c'
--- testsuite/geis2/check_device.c	2011-08-20 02:26:43 +0000
+++ testsuite/geis2/check_device.c	2011-11-22 20:39:25 +0000
@@ -86,6 +86,11 @@
   }
   fail_unless(device_event_count > 0, "no device events received");
 
+  GeisDevice failer = geis_get_device(g_geis, 123);
+  fail_unless(failer == NULL, "unexpected device retrieved");
+
+  GeisDevice gooder = geis_get_device(g_geis, 0);
+  fail_unless(gooder != NULL, "failed to retrive cached device");
 }
 END_TEST
 

