(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" #include "../drivers_wm/win32_shader_dlg.h"
#endif #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( static bool win32_browser(
HWND owner, HWND owner,
char *filename, char *filename,
@ -239,3 +268,42 @@ void win32_check_window(void)
} }
#endif #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); LRESULT win32_menu_loop(HWND handle, WPARAM wparam);
#endif #endif
bool win32_suppress_screensaver(void *data, bool enable);
bool win32_get_metrics(void *data, bool win32_get_metrics(void *data,
enum display_metric_types type, float *value); 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) static bool gfx_ctx_d3d_suppress_screensaver(void *data, bool enable)
{ {
(void)data; return win32_suppress_screensaver(data, enable);
(void)enable;
return false;
} }
static bool gfx_ctx_d3d_has_windowed(void *data) 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) static bool gfx_ctx_wgl_suppress_screensaver(void *data, bool enable)
{ {
(void)data; return win32_suppress_screensaver(data, enable);
(void)enable;
return false;
} }
static bool gfx_ctx_wgl_has_windowed(void *data) 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