Check for wine_get_version() to detect Wine/Proton
Some checks failed
Build (All) / Create test plan (push) Has been cancelled
Build (All) / level1 (push) Has been cancelled
Build (All) / level2 (push) Has been cancelled

If this application is being run under Wine but Steam doesn't know that, Steam won't set STEAM_COMPAT_PROTON. So we'll use wine_get_version() to detect that we're running under Wine instead.

(cherry picked from commit e2e8f86076)
(cherry picked from commit f36d683b61)
This commit is contained in:
Sam Lantinga
2025-11-12 21:40:05 -08:00
parent a069ac41e5
commit 385e995790
3 changed files with 26 additions and 1 deletions

View File

@@ -199,6 +199,24 @@ static BOOL IsWindowsVersionOrGreater(WORD wMajorVersion, WORD wMinorVersion, WO
}
#endif
BOOL WIN_IsWine(void)
{
static SDL_bool checked;
static SDL_bool is_wine;
if (!checked) {
HMODULE ntdll = LoadLibrary(TEXT("ntdll.dll"));
if (ntdll) {
if (GetProcAddress(ntdll, "wine_get_version") != NULL) {
is_wine = SDL_TRUE;
}
FreeLibrary(ntdll);
}
checked = SDL_TRUE;
}
return is_wine;
}
BOOL WIN_IsWindowsVistaOrGreater(void)
{
#if defined(__WINRT__) || defined(__XBOXONE__) || defined(__XBOXSERIES__)

View File

@@ -136,6 +136,9 @@ extern void WIN_CoUninitialize(void);
extern HRESULT WIN_RoInitialize(void);
extern void WIN_RoUninitialize(void);
/* Returns true if we're running on Wine */
extern BOOL WIN_IsWine(void);
/* Returns SDL_TRUE if we're running on Windows Vista and newer */
extern BOOL WIN_IsWindowsVistaOrGreater(void);

View File

@@ -37,6 +37,10 @@
#include "../events/SDL_events_c.h"
#endif
#if defined(__WIN32__)
#include "../core/windows/SDL_windows.h"
#endif
#if defined(__ANDROID__)
#include "SDL_system.h"
#endif
@@ -2130,7 +2134,7 @@ SDL_bool SDL_ShouldIgnoreGameController(const char *name, SDL_JoystickGUID guid)
#ifdef __WIN32__
if (SDL_GetHintBoolean("SDL_GAMECONTROLLER_ALLOW_STEAM_VIRTUAL_GAMEPAD", SDL_FALSE) &&
SDL_GetHintBoolean("STEAM_COMPAT_PROTON", SDL_FALSE)) {
WIN_IsWine()) {
/* We are launched by Steam and running under Proton
* We can't tell whether this controller is a Steam Virtual Gamepad,
* so assume that Proton is doing the appropriate filtering of controllers