SDL: testnative: print events with --info event

From ef6521aee762bd61e5a5d881eb1e972deeb9c5cd Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Sun, 4 Aug 2024 08:20:54 -0700
Subject: [PATCH] testnative: print events with --info event

---
 include/SDL3/SDL_test_common.h | 11 +++++++++--
 src/test/SDL_test_common.c     | 18 +++++++++++++++++-
 test/testnative.c              |  8 ++++++++
 3 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/include/SDL3/SDL_test_common.h b/include/SDL3/SDL_test_common.h
index 76ea5e45c0090..a162a3de5573d 100644
--- a/include/SDL3/SDL_test_common.h
+++ b/include/SDL3/SDL_test_common.h
@@ -208,9 +208,16 @@ SDL_bool SDLTest_CommonInit(SDLTest_CommonState *state);
 SDL_bool SDLTest_CommonDefaultArgs(SDLTest_CommonState *state, const int argc, char **argv);
 
 /**
- * Common event handler for test windows if you use a standard SDL_main.
+ * Print the details of an event.
+ *
+ * This is automatically called by SDLTest_CommonEvent() as needed.
  *
- * This will free data from the event, like the string in a drop event!
+ * \param event The event to print.
+ */
+void SDLTest_PrintEvent(const SDL_Event *event);
+
+/**
+ * Common event handler for test windows if you use a standard SDL_main.
  *
  * \param state The common state used to create test window.
  * \param event The event to handle.
diff --git a/src/test/SDL_test_common.c b/src/test/SDL_test_common.c
index 05289d35eca6e..5f84b36495854 100644
--- a/src/test/SDL_test_common.c
+++ b/src/test/SDL_test_common.c
@@ -615,6 +615,22 @@ int SDLTest_CommonArg(SDLTest_CommonState *state, int index)
             state->hide_cursor = SDL_TRUE;
             return 1;
         }
+    } else {
+        if (SDL_strcasecmp(argv[index], "--info") == 0) {
+            ++index;
+            if (!argv[index]) {
+                return -1;
+            }
+            if (SDL_strcasecmp(argv[index], "all") == 0) {
+                state->verbose |= VERBOSE_EVENT;
+                return 2;
+            }
+            if (SDL_strcasecmp(argv[index], "event") == 0) {
+                state->verbose |= VERBOSE_EVENT;
+                return 2;
+            }
+            return -1;
+        }
     }
 
     if (state->flags & SDL_INIT_AUDIO) {
@@ -1555,7 +1571,7 @@ static const char *GamepadButtonName(const SDL_GamepadButton button)
     }
 }
 
-static void SDLTest_PrintEvent(const SDL_Event *event)
+void SDLTest_PrintEvent(const SDL_Event *event)
 {
     switch (event->type) {
     case SDL_EVENT_SYSTEM_THEME_CHANGED:
diff --git a/test/testnative.c b/test/testnative.c
index aee65b3eeec77..449bff3748d17 100644
--- a/test/testnative.c
+++ b/test/testnative.c
@@ -206,6 +206,14 @@ int main(int argc, char *argv[])
     while (!done) {
         /* Check for events */
         while (SDL_PollEvent(&event)) {
+            if (state->verbose & VERBOSE_EVENT) {
+                if (((event.type != SDL_EVENT_MOUSE_MOTION) &&
+                    (event.type != SDL_EVENT_FINGER_MOTION)) ||
+                    (state->verbose & VERBOSE_MOTION)) {
+                    SDLTest_PrintEvent(&event);
+                }
+            }
+
             switch (event.type) {
             case SDL_EVENT_WINDOW_EXPOSED:
                 SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);