diff --git a/source/core/inputstate.h b/source/core/inputstate.h index 01996f41a0a..dd457046e34 100644 --- a/source/core/inputstate.h +++ b/source/core/inputstate.h @@ -126,3 +126,14 @@ inline void resetForcedSyncInput() { gamesetinput = false; } + +inline bool specialKeyEvent(event_t* ev) +{ + if (ev->type == EV_KeyDown || ev->type == EV_KeyUp) + { + int key = ev->data1; + if (key == KEY_VOLUMEDOWN || key == KEY_VOLUMEUP || (key > KEY_LASTJOYBUTTON && key < KEY_PAD_LTHUMB_RIGHT)) return true; + } + return false; +} + diff --git a/source/core/screenjob.cpp b/source/core/screenjob.cpp index 87cd92b79a4..f2417dc5b12 100644 --- a/source/core/screenjob.cpp +++ b/source/core/screenjob.cpp @@ -59,15 +59,10 @@ IMPLEMENT_CLASS(DImageScreen, true, false) bool DSkippableScreenJob::OnEvent(event_t* evt) { - if (evt->type == EV_KeyDown) + if (evt->type == EV_KeyDown && !specialKeyEvent(evt)) { - auto& key = evt->data1; - bool ignoredkeys = key == KEY_VOLUMEDOWN || key == KEY_VOLUMEUP || (key > KEY_LASTJOYBUTTON && key < KEY_PAD_LTHUMB_RIGHT); - if (!ignoredkeys) - { - state = skipped; - Skipped(); - } + state = skipped; + Skipped(); } return true; } @@ -230,6 +225,7 @@ class ScreenJobRunner } if (jobs[index].job->state != DScreenJob::running) return false; + return jobs[index].job->OnEvent(ev); } diff --git a/source/games/duke/src/2d_d.cpp b/source/games/duke/src/2d_d.cpp index 34e6d8a9735..c26c7ad1477 100644 --- a/source/games/duke/src/2d_d.cpp +++ b/source/games/duke/src/2d_d.cpp @@ -858,7 +858,7 @@ class DDukeLevelSummaryScreen : public DScreenJob bool OnEvent(event_t* ev) override { - if (ev->type == EV_KeyDown) + if (ev->type == EV_KeyDown && !specialKeyEvent(ev)) { if ((displaystate & printStatsAll) != printStatsAll) { diff --git a/source/games/duke/src/2d_r.cpp b/source/games/duke/src/2d_r.cpp index caf2440a554..25d52ac8ac4 100644 --- a/source/games/duke/src/2d_r.cpp +++ b/source/games/duke/src/2d_r.cpp @@ -400,7 +400,7 @@ class DRRLevelSummaryScreen : public DScreenJob bool OnEvent(event_t* ev) override { - if (ev->type == EV_KeyDown) + if (ev->type == EV_KeyDown && !specialKeyEvent(ev)) { if ((displaystate & printStatsAll) != printStatsAll) { diff --git a/source/games/exhumed/src/2d.cpp b/source/games/exhumed/src/2d.cpp index 8606ab507e4..2acd243157d 100644 --- a/source/games/exhumed/src/2d.cpp +++ b/source/games/exhumed/src/2d.cpp @@ -808,7 +808,7 @@ class DMapScreen : public DScreenJob } return true; } - state = skipped; + if (!specialKeyEvent(ev)) state = skipped; return true; } return false; @@ -1163,7 +1163,7 @@ class DLastLevelCinema : public DScreenJob bool OnEvent(event_t* ev) { - if (ev->type == EV_KeyDown) skiprequest = true; + if (ev->type == EV_KeyDown && !specialKeyEvent(ev)) skiprequest = true; return true; } @@ -1278,7 +1278,7 @@ class DExCredits : public DScreenJob bool OnEvent(event_t* ev) { - if (ev->type == EV_KeyDown) skiprequest = true; + if (ev->type == EV_KeyDown && !specialKeyEvent(ev)) skiprequest = true; return true; } diff --git a/source/games/sw/src/2d.cpp b/source/games/sw/src/2d.cpp index ce85b1bbfe2..9c982f0c639 100644 --- a/source/games/sw/src/2d.cpp +++ b/source/games/sw/src/2d.cpp @@ -389,7 +389,7 @@ class DSWLevelSummaryScreen : public DScreenJob bool OnEvent(event_t* ev) override { - if (ev->type == EV_KeyDown) + if (ev->type == EV_KeyDown && !specialKeyEvent(ev)) { if (State >= s_BonusRest && State < &s_BonusRest[countof(s_BonusRest)]) {