mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-12-17 04:24:18 +08:00
Check for wine_get_version() to detect Wine/Proton
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 commite2e8f86076) (cherry picked from commitf36d683b61)
This commit is contained in:
@@ -199,6 +199,24 @@ static BOOL IsWindowsVersionOrGreater(WORD wMajorVersion, WORD wMinorVersion, WO
|
|||||||
}
|
}
|
||||||
#endif
|
#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)
|
BOOL WIN_IsWindowsVistaOrGreater(void)
|
||||||
{
|
{
|
||||||
#if defined(__WINRT__) || defined(__XBOXONE__) || defined(__XBOXSERIES__)
|
#if defined(__WINRT__) || defined(__XBOXONE__) || defined(__XBOXSERIES__)
|
||||||
|
|||||||
@@ -136,6 +136,9 @@ extern void WIN_CoUninitialize(void);
|
|||||||
extern HRESULT WIN_RoInitialize(void);
|
extern HRESULT WIN_RoInitialize(void);
|
||||||
extern void WIN_RoUninitialize(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 */
|
/* Returns SDL_TRUE if we're running on Windows Vista and newer */
|
||||||
extern BOOL WIN_IsWindowsVistaOrGreater(void);
|
extern BOOL WIN_IsWindowsVistaOrGreater(void);
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,10 @@
|
|||||||
#include "../events/SDL_events_c.h"
|
#include "../events/SDL_events_c.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__WIN32__)
|
||||||
|
#include "../core/windows/SDL_windows.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__ANDROID__)
|
#if defined(__ANDROID__)
|
||||||
#include "SDL_system.h"
|
#include "SDL_system.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -2130,7 +2134,7 @@ SDL_bool SDL_ShouldIgnoreGameController(const char *name, SDL_JoystickGUID guid)
|
|||||||
|
|
||||||
#ifdef __WIN32__
|
#ifdef __WIN32__
|
||||||
if (SDL_GetHintBoolean("SDL_GAMECONTROLLER_ALLOW_STEAM_VIRTUAL_GAMEPAD", SDL_FALSE) &&
|
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 are launched by Steam and running under Proton
|
||||||
* We can't tell whether this controller is a Steam Virtual Gamepad,
|
* We can't tell whether this controller is a Steam Virtual Gamepad,
|
||||||
* so assume that Proton is doing the appropriate filtering of controllers
|
* so assume that Proton is doing the appropriate filtering of controllers
|
||||||
|
|||||||
Reference in New Issue
Block a user