From da50e4cd7f98acaecb74f81ded68a0f5c18f1a98 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gustaf=20Alh=C3=A4ll?= <gustaf@hanicef.me>
Date: Sun, 20 Oct 2024 12:35:56 +0200
Subject: [PATCH] Add unblockable console key

---
 src/console.c | 16 ++++++++++++++++
 src/console.h |  1 +
 src/d_main.c  |  3 +++
 3 files changed, 20 insertions(+)

diff --git a/src/console.c b/src/console.c
index 50ecfec9c2..c38a32b4f8 100644
--- a/src/console.c
+++ b/src/console.c
@@ -918,6 +918,22 @@ static void CON_InputDelChar(void)
 // ----
 //
 
+//
+// Same as CON_Responder, but is process before everything else, so it cannot be blocked.
+//
+boolean CON_PreResponder(event_t *ev)
+{
+	if (ev->type == ev_keydown && shiftdown == 1 && ev->key == KEY_ESCAPE)
+	{
+		I_SetTextInputMode(con_destlines == 0); // inverse, since this is changed next tic.
+		consoletoggle = true;
+		return true;
+	}
+
+	return false;
+}
+
+//
 // Handles console key input
 //
 boolean CON_Responder(event_t *ev)
diff --git a/src/console.h b/src/console.h
index 2af01f1a3a..664b74a223 100644
--- a/src/console.h
+++ b/src/console.h
@@ -19,6 +19,7 @@ void CON_Init(void);
 void CON_StartRefresh(void);
 void CON_StopRefresh(void);
 
+boolean CON_PreResponder(event_t *ev);
 boolean CON_Responder(event_t *ev);
 
 #ifdef HAVE_THREADS
diff --git a/src/d_main.c b/src/d_main.c
index a6a9385d29..2ae741c4eb 100644
--- a/src/d_main.c
+++ b/src/d_main.c
@@ -227,6 +227,9 @@ void D_ProcessEvents(void)
 			}
 		}
 
+		if (CON_PreResponder(ev))
+			continue;
+
 		// Screenshots over everything so that they can be taken anywhere.
 		if (M_ScreenshotResponder(ev))
 			continue; // ate the event
-- 
GitLab