SDL: Use the keyboard/mouse vendor if available

From fdf72d1e45ad4a251fe3d978a70ff14261af6f93 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Sat, 22 Feb 2025 08:35:27 -0800
Subject: [PATCH] Use the keyboard/mouse vendor if available

Fixes the 8BitDo Micro gamepad so it shows up as "8BitDo HID-compliant mouse" and "8BitDo HID Keyboard Device" in keyboard mode over USB.
---
 src/video/windows/SDL_windowsevents.c | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c
index 897d999bb5c37..8e1ddd7d3c8e5 100644
--- a/src/video/windows/SDL_windowsevents.c
+++ b/src/video/windows/SDL_windowsevents.c
@@ -895,17 +895,7 @@ static char *GetDeviceName(HANDLE hDevice, HDEVINFO devinfo, const char *instanc
         }
     }
 
-    if (prod[0]) {
-        char *vendor_name = WIN_StringToUTF8W(vend);
-        char *product_name = WIN_StringToUTF8W(prod);
-        if (product_name) {
-            name = SDL_CreateDeviceName(attr.VendorID, attr.ProductID, vendor_name, product_name);
-        }
-        SDL_free(vendor_name);
-        SDL_free(product_name);
-    }
-
-    if (!name) {
+    if (!prod[0]) {
         SP_DEVINFO_DATA data;
         SDL_zero(data);
         data.cbSize = sizeof(data);
@@ -932,13 +922,21 @@ static char *GetDeviceName(HANDLE hDevice, HDEVINFO devinfo, const char *instanc
                         size = (SDL_arraysize(prod) - 1);
                     }
                     prod[size] = 0;
-
-                    name = WIN_StringToUTF8W(prod);
                 }
                 break;
             }
         }
     }
+
+    if (prod[0]) {
+        char *vendor_name = vend[0] ? WIN_StringToUTF8W(vend) : NULL;
+        char *product_name = WIN_StringToUTF8W(prod);
+        if (product_name) {
+            name = SDL_CreateDeviceName(attr.VendorID, attr.ProductID, vendor_name, product_name);
+        }
+        SDL_free(vendor_name);
+        SDL_free(product_name);
+    }
     return name;
 }