Commit 34d4f5b14e5b009e94ff752f3c4e2c37033b78c4

Sylvain 2022-02-08T11:32:20

Fixed bug #2032: add SDL_GetTouchName to expose the driver name of the device (Thanks @mgerhardy!)

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;