(Win32) Create win32_suppress_screensaver

This commit is contained in:
twinaphex 2015-10-10 08:13:58 +02:00
parent 7f164647a2
commit ff59f92341
5 changed files with 1334 additions and 8 deletions

View File

@ -30,6 +30,35 @@
#include "../drivers_wm/win32_shader_dlg.h"
#endif
#ifndef _XBOX
/* Power Request APIs */
typedef REASON_CONTEXT POWER_REQUEST_CONTEXT, *PPOWER_REQUEST_CONTEXT, *LPPOWER_REQUEST_CONTEXT;
WINBASEAPI
HANDLE
WINAPI
PowerCreateRequest (
PREASON_CONTEXT Context
);
WINBASEAPI
BOOL
WINAPI
PowerSetRequest (
HANDLE PowerRequest,
POWER_REQUEST_TYPE RequestType
);
WINBASEAPI
BOOL
WINAPI
PowerClearRequest (
HANDLE PowerRequest,
POWER_REQUEST_TYPE RequestType
);
#endif
static bool win32_browser(
HWND owner,
char *filename,
@ -239,3 +268,42 @@ void win32_check_window(void)
}
#endif
}
bool win32_suppress_screensaver(void *data, bool enable)
{
#ifdef _XBOX
return false;
#else
typedef HANDLE (WINAPI * PowerCreateRequestPtr)(REASON_CONTEXT *context);
HMODULE kernel32 = GetModuleHandleW(L"kernel32.dll");
PowerCreateRequestPtr powerCreateRequest =
(PowerCreateRequestPtr)GetProcAddress(kernel32, "PowerCreateRequest");
if(enable)
{
if(powerCreateRequest)
{
/* Windows 7, 8, 10 codepath */
POWER_REQUEST_CONTEXT RequestContext;
HANDLE Request;
RequestContext.Version = POWER_REQUEST_CONTEXT_VERSION;
RequestContext.Flags = POWER_REQUEST_CONTEXT_SIMPLE_STRING;
RequestContext.Reason.SimpleReasonString = L"RetroArch running";
Request = PowerCreateRequest(&RequestContext);
PowerSetRequest( Request, PowerRequestDisplayRequired);
return true;
}
else
{
/* XP / Vista codepath */
SetThreadExecutionState(ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED);
return true;
}
}
return false;
#endif
}

View File

@ -37,6 +37,8 @@ LRESULT win32_handle_keyboard_event(HWND hwnd, UINT message,
LRESULT win32_menu_loop(HWND handle, WPARAM wparam);
#endif
bool win32_suppress_screensaver(void *data, bool enable);
bool win32_get_metrics(void *data,
enum display_metric_types type, float *value);

View File

@ -206,10 +206,7 @@ static bool gfx_ctx_d3d_has_focus(void *data)
static bool gfx_ctx_d3d_suppress_screensaver(void *data, bool enable)
{
(void)data;
(void)enable;
return false;
return win32_suppress_screensaver(data, enable);
}
static bool gfx_ctx_d3d_has_windowed(void *data)

View File

@ -640,10 +640,7 @@ static bool gfx_ctx_wgl_has_focus(void *data)
static bool gfx_ctx_wgl_suppress_screensaver(void *data, bool enable)
{
(void)data;
(void)enable;
return false;
return win32_suppress_screensaver(data, enable);
}
static bool gfx_ctx_wgl_has_windowed(void *data)

1262
menu/driverspzarch.c Normal file

File diff suppressed because it is too large Load Diff