Fixed bug #2032: add SDL_GetTouchName to expose the driver name of the device (Thanks @mgerhardy!)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
diff --git a/include/SDL_touch.h b/include/SDL_touch.h
index 9b00716..d7f6a83 100644
--- a/include/SDL_touch.h
+++ b/include/SDL_touch.h
@@ -96,6 +96,11 @@ extern DECLSPEC int SDLCALL SDL_GetNumTouchDevices(void);
extern DECLSPEC SDL_TouchID SDLCALL SDL_GetTouchDevice(int index);
/**
+ * \brief Get the touch device name as reported from the driver or NULL if the index is invalid.
+ */
+extern DECLSPEC const char* SDLCALL SDL_GetTouchName(int index);
+
+/**
* Get the type of the given touch device.
*
* \since This function is available since SDL 2.0.10.
diff --git a/src/events/SDL_touch.c b/src/events/SDL_touch.c
index fda5305..c3534f0 100644
--- a/src/events/SDL_touch.c
+++ b/src/events/SDL_touch.c
@@ -63,6 +63,16 @@ SDL_GetTouchDevice(int index)
return SDL_touchDevices[index]->id;
}
+const char*
+SDL_GetTouchName(int index)
+{
+ if (index < 0 || index >= SDL_num_touch) {
+ SDL_SetError("Unknown touch device");
+ return NULL;
+ }
+ return SDL_touchDevices[index]->name;
+}
+
static int
SDL_GetTouchIndex(SDL_TouchID id)
{
@@ -185,6 +195,7 @@ SDL_AddTouch(SDL_TouchID touchID, SDL_TouchDeviceType type, const char *name)
SDL_touchDevices[index]->num_fingers = 0;
SDL_touchDevices[index]->max_fingers = 0;
SDL_touchDevices[index]->fingers = NULL;
+ SDL_touchDevices[index]->name = SDL_strdup(name ? name : "");
/* Record this touch device for gestures */
/* We could do this on the fly in the gesture code if we wanted */
@@ -452,6 +463,7 @@ SDL_DelTouch(SDL_TouchID id)
SDL_free(touch->fingers[i]);
}
SDL_free(touch->fingers);
+ SDL_free(touch->name);
SDL_free(touch);
SDL_num_touch--;
diff --git a/src/events/SDL_touch_c.h b/src/events/SDL_touch_c.h
index c9d9a32..4d5caf1 100644
--- a/src/events/SDL_touch_c.h
+++ b/src/events/SDL_touch_c.h
@@ -31,6 +31,7 @@ typedef struct SDL_Touch
int num_fingers;
int max_fingers;
SDL_Finger** fingers;
+ char *name;
} SDL_Touch;