diff --git a/zsnes/src/gui/gui.asm b/zsnes/src/gui/gui.asm index 88ac09e9..f0c949c7 100644 --- a/zsnes/src/gui/gui.asm +++ b/zsnes/src/gui/gui.asm @@ -148,7 +148,7 @@ EXTSYM MovieVideoMode, MovieAudioMode %ifdef __UNIXSDL__ EXTSYM numlockptr %elifdef __WIN32__ -EXTSYM initDirectDraw,reInitSound +EXTSYM initDirectDraw,reInitSound,CheckAlwaysOnTop,CheckPriority,CheckScreenSaver %elifdef __MSDOS__ EXTSYM dssel,SetInputDevice209,initvideo2 %endif diff --git a/zsnes/src/gui/guikeys.inc b/zsnes/src/gui/guikeys.inc index 0f5c2e8f..783f3fd8 100644 --- a/zsnes/src/gui/guikeys.inc +++ b/zsnes/src/gui/guikeys.inc @@ -770,6 +770,9 @@ GUIOptionKeys: GUIKeyCheckbox SidewinderFix,'I' %elifdef __WIN32__ GUIKeyCheckbox HighPriority,'H' + pushad + call CheckPriority + popad %endif GUIKeyCheckbox FPSAtStart,'F' GUIKeyCheckbox Turbo30hz,'E' @@ -785,6 +788,9 @@ GUIOptionKeys: %endif %ifdef __WIN32__ GUIKeyCheckbox DisableScreenSaver,'I' + pushad + call CheckScreenSaver + popad %endif ret diff --git a/zsnes/src/gui/guimouse.inc b/zsnes/src/gui/guimouse.inc index b75d881c..c945bbe3 100644 --- a/zsnes/src/gui/guimouse.inc +++ b/zsnes/src/gui/guimouse.inc @@ -20,8 +20,6 @@ %ifdef __WIN32__ -EXTSYM CheckPriority -EXTSYM CheckAlwaysOnTop EXTSYM MinimizeWindow %endif @@ -1357,24 +1355,6 @@ GUIWinClicked: %%noclick %endmacro -%macro GUIClickCButtonW 3 - cmp eax,%1+1 - jl %%noclick - cmp edx,%2+3 - jl %%noclick - cmp eax,%1+6 - jg %%noclick - cmp edx,%2+8 - jg %%noclick - xor %3,1 -%%noclick -%ifdef __WIN32__ - pushad - call CheckPriority - popad -%endif -%endmacro - %macro GUIClickCButtonI 3 cmp eax,%1+1 jl %%noclick @@ -2343,9 +2323,11 @@ DisplayGUIOptionClick: GUIClickCButtonM 11,50,byte[pl12s34] %ifdef __MSDOS__ GUIClickCButton 11,60,byte[SidewinderFix] -%endif -%ifdef __WIN32__ - GUIClickCButtonW 11,60,byte[HighPriority] +%elifdef __WIN32__ + GUIClickCButton 11,60,byte[HighPriority] + pushad + call CheckPriority + popad %endif GUIClickCButton 11,70,byte[FPSAtStart] GUIClickCButton 11,80,byte[Turbo30hz] @@ -2360,7 +2342,10 @@ DisplayGUIOptionClick: GUIClickCButton 11,160,byte[PauseFocusChange] %endif %ifdef __WIN32__ - GUIClickCButtonW 11,170,byte[DisableScreenSaver] + GUIClickCButton 11,170,byte[DisableScreenSaver] + pushad + call CheckScreenSaver + popad %endif ret diff --git a/zsnes/src/win/winlink.cpp b/zsnes/src/win/winlink.cpp index b46f6596..82e747ab 100644 --- a/zsnes/src/win/winlink.cpp +++ b/zsnes/src/win/winlink.cpp @@ -456,6 +456,12 @@ extern "C" void CheckAlwaysOnTop() else SetWindowPos(hMainWindow, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); } +extern "C" void CheckScreenSaver() +{ + if (DisableScreenSaver == 1 && IsActivated == 1) SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, FALSE, 0, SPIF_SENDCHANGE); + else SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, TRUE, 0, SPIF_SENDCHANGE); +} + extern "C" void MinimizeWindow() { ShowWindow(hMainWindow, SW_MINIMIZE); @@ -544,6 +550,7 @@ void ExitFunction() if (debugWindow) FreeConsole(); IsActivated = 0; + CheckScreenSaver(); ReleaseDirectInput(); ReleaseDirectSound(); ReleaseDirectDraw(); @@ -667,6 +674,7 @@ LRESULT CALLBACK Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) if (FirstActivate == 1) FirstActivate = 0; if (FullScreen == 1) Clear2xSaIBuffer(); CheckPriority(); + CheckScreenSaver(); } if (LOWORD(wParam) == WA_INACTIVE) { @@ -674,32 +682,25 @@ LRESULT CALLBACK Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) if (PauseFocusChange) EMUPause = 1; InputDeAcquire(); if (GUIOn || GUIOn2 || EMUPause) SetPriorityClass(GetCurrentProcess(), IDLE_PRIORITY_CLASS); + CheckScreenSaver(); } break; case WM_SETFOCUS: if (FullScreen == 0) ShowWindow(hMainWindow, SW_SHOWNORMAL); CheckPriority(); + CheckScreenSaver(); InputAcquire(); break; case WM_KILLFOCUS: InputDeAcquire(); IsActivated = 0; if (GUIOn || GUIOn2 || EMUPause) SetPriorityClass(GetCurrentProcess(), IDLE_PRIORITY_CLASS); + CheckScreenSaver(); break; case WM_DESTROY: break; case WM_CLOSE: break; - case WM_SYSCOMMAND: - if (DisableScreenSaver) - { - switch (wParam) - { - case SC_MONITORPOWER: - return 0; - } - } - break; } return DefWindowProc(hWnd,uMsg,wParam,lParam);; } @@ -2097,6 +2098,7 @@ void initwinvideo(void) CheckPriority(); CheckAlwaysOnTop(); + CheckScreenSaver(); if (!hMainWindow) {