diff --git a/src/common/platform/win32/i_input.cpp b/src/common/platform/win32/i_input.cpp index c058cdfa9..33201872c 100644 --- a/src/common/platform/win32/i_input.cpp +++ b/src/common/platform/win32/i_input.cpp @@ -128,6 +128,7 @@ EXTERN_CVAR(Bool, i_pauseinbackground); CVAR (Bool, k_allowfullscreentoggle, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) +CVAR (Bool, i_allowprioritychange, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) static void I_CheckGUICapture () { @@ -485,13 +486,16 @@ LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) case WM_ACTIVATEAPP: AppActive = (wParam == TRUE); - if (wParam || !i_pauseinbackground) + if (!i_pauseinbackground && i_allowprioritychange) { - SetPriorityClass (GetCurrentProcess (), INGAME_PRIORITY_CLASS); - } - else if (!noidle && !(sysCallbacks.NetGame && sysCallbacks.NetGame())) - { - SetPriorityClass (GetCurrentProcess (), IDLE_PRIORITY_CLASS); + if (wParam) + { + SetPriorityClass (GetCurrentProcess (), INGAME_PRIORITY_CLASS); + } + else if (!noidle && !(sysCallbacks.NetGame && sysCallbacks.NetGame())) + { + SetPriorityClass (GetCurrentProcess (), IDLE_PRIORITY_CLASS); + } } S_SetSoundPaused (wParam); break; diff --git a/src/common/platform/win32/i_system.cpp b/src/common/platform/win32/i_system.cpp index a2b48dda7..e2e3736e6 100644 --- a/src/common/platform/win32/i_system.cpp +++ b/src/common/platform/win32/i_system.cpp @@ -243,6 +243,9 @@ void CalculateCPUSpeed() // probably never use the performance statistics. min_diff = freq.LowPart * 11 / 200; + // just in case we were launched with a custom priority class, keep it + DWORD OldPriorityClass = GetPriorityClass(GetCurrentProcess()); + // Minimize the chance of task switching during the testing by going very // high priority. This is another reason to avoid timing for too long. SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS); @@ -257,7 +260,7 @@ void CalculateCPUSpeed() do { QueryPerformanceCounter(&count1); } while ((count1.QuadPart - count2.QuadPart) < min_diff); ClockCalibration.Unclock(); - SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS); + SetPriorityClass(GetCurrentProcess(), OldPriorityClass); SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL); PerfToSec = double(count1.QuadPart - count2.QuadPart) / (double(ClockCalibration.GetRawCounter()) * freq.QuadPart); diff --git a/wadsrc/static/zscript/actors/actor.zs b/wadsrc/static/zscript/actors/actor.zs index 94e95e86e..7293205df 100644 --- a/wadsrc/static/zscript/actors/actor.zs +++ b/wadsrc/static/zscript/actors/actor.zs @@ -1302,7 +1302,7 @@ class Actor : Thinker native native bool A_SetSize(double newradius = -1, double newheight = -1, bool testpos = false); native void A_SprayDecal(String name, double dist = 172, vector3 offset = (0, 0, 0), vector3 direction = (0, 0, 0), bool useBloodColor = false, color decalColor = 0, TranslationID translation = 0); native void A_SetMugshotState(String name); - native void CopyBloodColor(Actor other); + native void CopyBloodColor(readonly other); native void A_RearrangePointers(int newtarget, int newmaster = AAPTR_DEFAULT, int newtracer = AAPTR_DEFAULT, int flags=0); native void A_TransferPointer(int ptr_source, int ptr_recipient, int sourcefield, int recipientfield=AAPTR_DEFAULT, int flags=0);