mirror of
				https://github.com/libsdl-org/SDL.git
				synced 2025-11-04 01:34:38 +00:00 
			
		
		
		
	Added a hint to disable windows message processing in SDL_PumpEvents()
SDL_SetHint( SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP, "0" );
This commit is contained in:
		@@ -196,6 +196,17 @@ extern "C" {
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
#define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN    "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN"
 | 
					#define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN    "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 *  \brief  A variable controlling whether the windows message loop is processed by SDL 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  This variable can be set to the following values:
 | 
				
			||||||
 | 
					 *    "0"       - The window message loop is not run
 | 
				
			||||||
 | 
					 *    "1"       - The window message loop is processed in SDL_PumpEvents()
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  By default SDL will process the windows message loop
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP "SDL_WINDOWS_ENABLE_MESSAGELOOP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 *  \brief  A variable controlling whether grabbing input grabs the keyboard
 | 
					 *  \brief  A variable controlling whether grabbing input grabs the keyboard
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -890,6 +890,7 @@ WIN_PumpEvents(_THIS)
 | 
				
			|||||||
    MSG msg;
 | 
					    MSG msg;
 | 
				
			||||||
    DWORD start_ticks = GetTickCount();
 | 
					    DWORD start_ticks = GetTickCount();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (g_WindowsEnableMessageLoop) {
 | 
				
			||||||
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
 | 
					        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
 | 
				
			||||||
            /* Always translate the message in case it's a non-SDL window (e.g. with Qt integration) */
 | 
					            /* Always translate the message in case it's a non-SDL window (e.g. with Qt integration) */
 | 
				
			||||||
            TranslateMessage(&msg);
 | 
					            TranslateMessage(&msg);
 | 
				
			||||||
@@ -900,6 +901,7 @@ WIN_PumpEvents(_THIS)
 | 
				
			|||||||
                break;
 | 
					                break;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Windows loses a shift KEYUP event when you have both pressed at once and let go of one.
 | 
					    /* Windows loses a shift KEYUP event when you have both pressed at once and let go of one.
 | 
				
			||||||
       You won't get a KEYUP until both are released, and that keyup will only be for the second
 | 
					       You won't get a KEYUP until both are released, and that keyup will only be for the second
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,8 +39,18 @@ static int WIN_VideoInit(_THIS);
 | 
				
			|||||||
static void WIN_VideoQuit(_THIS);
 | 
					static void WIN_VideoQuit(_THIS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Hints */
 | 
					/* Hints */
 | 
				
			||||||
 | 
					SDL_bool g_WindowsEnableMessageLoop = SDL_TRUE;
 | 
				
			||||||
SDL_bool g_WindowFrameUsableWhileCursorHidden = SDL_TRUE;
 | 
					SDL_bool g_WindowFrameUsableWhileCursorHidden = SDL_TRUE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void UpdateWindowsEnableMessageLoop(void *userdata, const char *name, const char *oldValue, const char *newValue)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (newValue && *newValue == '0') {
 | 
				
			||||||
 | 
					        g_WindowsEnableMessageLoop = SDL_FALSE;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        g_WindowsEnableMessageLoop = SDL_TRUE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void UpdateWindowFrameUsableWhileCursorHidden(void *userdata, const char *name, const char *oldValue, const char *newValue)
 | 
					static void UpdateWindowFrameUsableWhileCursorHidden(void *userdata, const char *name, const char *oldValue, const char *newValue)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (newValue && *newValue == '0') {
 | 
					    if (newValue && *newValue == '0') {
 | 
				
			||||||
@@ -97,9 +107,9 @@ WIN_CreateDevice(int devindex)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    data->userDLL = SDL_LoadObject("USER32.DLL");
 | 
					    data->userDLL = SDL_LoadObject("USER32.DLL");
 | 
				
			||||||
    if (data->userDLL) {
 | 
					    if (data->userDLL) {
 | 
				
			||||||
        data->CloseTouchInputHandle = (BOOL (WINAPI *)( HTOUCHINPUT )) SDL_LoadFunction(data->userDLL, "CloseTouchInputHandle");
 | 
					        data->CloseTouchInputHandle = (BOOL (WINAPI *)(HTOUCHINPUT)) SDL_LoadFunction(data->userDLL, "CloseTouchInputHandle");
 | 
				
			||||||
        data->GetTouchInputInfo = (BOOL (WINAPI *)( HTOUCHINPUT, UINT, PTOUCHINPUT, int )) SDL_LoadFunction(data->userDLL, "GetTouchInputInfo");
 | 
					        data->GetTouchInputInfo = (BOOL (WINAPI *)(HTOUCHINPUT, UINT, PTOUCHINPUT, int)) SDL_LoadFunction(data->userDLL, "GetTouchInputInfo");
 | 
				
			||||||
        data->RegisterTouchWindow = (BOOL (WINAPI *)( HWND, ULONG )) SDL_LoadFunction(data->userDLL, "RegisterTouchWindow");
 | 
					        data->RegisterTouchWindow = (BOOL (WINAPI *)(HWND, ULONG)) SDL_LoadFunction(data->userDLL, "RegisterTouchWindow");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Set the function pointers */
 | 
					    /* Set the function pointers */
 | 
				
			||||||
@@ -178,7 +188,8 @@ WIN_VideoInit(_THIS)
 | 
				
			|||||||
    WIN_InitKeyboard(_this);
 | 
					    WIN_InitKeyboard(_this);
 | 
				
			||||||
    WIN_InitMouse(_this);
 | 
					    WIN_InitMouse(_this);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    SDL_AddHintCallback( SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN, UpdateWindowFrameUsableWhileCursorHidden, NULL );
 | 
					    SDL_AddHintCallback(SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP, UpdateWindowsEnableMessageLoop, NULL);
 | 
				
			||||||
 | 
					    SDL_AddHintCallback(SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN, UpdateWindowFrameUsableWhileCursorHidden, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -196,7 +207,7 @@ WIN_VideoQuit(_THIS)
 | 
				
			|||||||
#include <d3d9.h>
 | 
					#include <d3d9.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SDL_bool 
 | 
					SDL_bool 
 | 
				
			||||||
D3D_LoadDLL( void **pD3DDLL, IDirect3D9 **pDirect3D9Interface )
 | 
					D3D_LoadDLL(void **pD3DDLL, IDirect3D9 **pDirect3D9Interface)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    *pD3DDLL = SDL_LoadObject("D3D9.DLL");
 | 
					    *pD3DDLL = SDL_LoadObject("D3D9.DLL");
 | 
				
			||||||
    if (*pD3DDLL) {
 | 
					    if (*pD3DDLL) {
 | 
				
			||||||
@@ -239,7 +250,7 @@ D3D_LoadDLL( void **pD3DDLL, IDirect3D9 **pDirect3D9Interface )
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int
 | 
					int
 | 
				
			||||||
SDL_Direct3D9GetAdapterIndex( int displayIndex )
 | 
					SDL_Direct3D9GetAdapterIndex(int displayIndex)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    void *pD3DDLL;
 | 
					    void *pD3DDLL;
 | 
				
			||||||
    IDirect3D9 *pD3D;
 | 
					    IDirect3D9 *pD3D;
 | 
				
			||||||
@@ -287,7 +298,7 @@ DXGI_LoadDLL(void **pDXGIDLL, IDXGIFactory **pDXGIFactory)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    *pDXGIDLL = SDL_LoadObject("DXGI.DLL");
 | 
					    *pDXGIDLL = SDL_LoadObject("DXGI.DLL");
 | 
				
			||||||
    if (*pDXGIDLL) {
 | 
					    if (*pDXGIDLL) {
 | 
				
			||||||
        HRESULT (WINAPI *CreateDXGI)( REFIID riid, void **ppFactory );
 | 
					        HRESULT (WINAPI *CreateDXGI)(REFIID riid, void **ppFactory);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        CreateDXGI =
 | 
					        CreateDXGI =
 | 
				
			||||||
            (HRESULT (WINAPI *) (REFIID, void**)) SDL_LoadFunction(*pDXGIDLL,
 | 
					            (HRESULT (WINAPI *) (REFIID, void**)) SDL_LoadFunction(*pDXGIDLL,
 | 
				
			||||||
@@ -365,7 +376,7 @@ SDL_DXGIGetOutputInfo(int displayIndex, int *adapterIndex, int *outputIndex)
 | 
				
			|||||||
                    *adapterIndex = nAdapter;
 | 
					                    *adapterIndex = nAdapter;
 | 
				
			||||||
                    *outputIndex = nOutput;
 | 
					                    *outputIndex = nOutput;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                SDL_free( outputName );
 | 
					                SDL_free(outputName);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            IDXGIOutput_Release(pDXGIOutput);
 | 
					            IDXGIOutput_Release(pDXGIOutput);
 | 
				
			||||||
            nOutput++;
 | 
					            nOutput++;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -171,6 +171,7 @@ typedef struct SDL_VideoData
 | 
				
			|||||||
    TSFSink *ime_ippasink;
 | 
					    TSFSink *ime_ippasink;
 | 
				
			||||||
} SDL_VideoData;
 | 
					} SDL_VideoData;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern SDL_bool g_WindowsEnableMessageLoop;
 | 
				
			||||||
extern SDL_bool g_WindowFrameUsableWhileCursorHidden;
 | 
					extern SDL_bool g_WindowFrameUsableWhileCursorHidden;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct IDirect3D9 IDirect3D9;
 | 
					typedef struct IDirect3D9 IDirect3D9;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user