added command line option to drop file into program window
authorHolger Schemel <holger.schemel@virtion.de>
Wed, 22 May 2024 16:47:55 +0000 (18:47 +0200)
committerHolger Schemel <holger.schemel@virtion.de>
Wed, 22 May 2024 16:47:58 +0000 (18:47 +0200)
src/init.c
src/libgame/misc.c
src/libgame/system.c
src/libgame/system.h
src/main.c

index 807a9a14e5d238bc94504f08e80c5b1956a937ae..e451d99ef862f9cd2d09d081c1ce136e0f8483db 100644 (file)
@@ -6752,6 +6752,9 @@ void OpenAll(void)
 
   DrawMainMenu();
 
+  if (options.drop_file != NULL)
+    PushDropEvent(options.drop_file);
+
 #if 0
   Debug("internal:path", "SDL_GetBasePath() == '%s'",
        SDL_GetBasePath());
index 5e63c31f93307102d0b9903d12bf8aaebf722d25..ed4bd5d62c991d7e94f72cb150ab904ee8c2935f 100644 (file)
@@ -1704,6 +1704,7 @@ void GetOptions(int argc, char *argv[],
   options.player_name = NULL;
   options.identifier = NULL;
   options.level_nr = NULL;
+  options.drop_file = NULL;
 
   options.display_nr = 0;
 
@@ -1870,6 +1871,15 @@ void GetOptions(int argc, char *argv[],
       if (option_arg == next_option)
        options_left++;
     }
+    else if (strncmp(option, "-drop-file", option_len) == 0)
+    {
+      if (option_arg == NULL)
+       FailWithHelp("option '%s' requires an argument", option_str);
+
+      options.drop_file = getStringCopy(option_arg);
+      if (option_arg == next_option)
+       options_left++;
+    }
     else if (strncmp(option, "-verbose", option_len) == 0)
     {
       options.verbose = TRUE;
index a1f009f77c8470f5d0b7e0fcbe85eb97db53ecd0..e77e6fe67bfede76ebdcf56b619f281172bea158 100644 (file)
@@ -1843,6 +1843,28 @@ void PushUserEvent(int code, int value1, int value2)
   SDL_PushEvent((SDL_Event *)&event);
 }
 
+void PushDropEvent(char *file)
+{
+  SDL_DropEvent event;
+
+  SDL_memset(&event, 0, sizeof(event));
+
+  event.type = SDL_DROPBEGIN;
+  event.file = NULL;
+
+  SDL_PushEvent((SDL_Event *)&event);
+
+  event.type = SDL_DROPFILE;
+  event.file = getStringCopy(file);
+
+  SDL_PushEvent((SDL_Event *)&event);
+
+  event.type = SDL_DROPCOMPLETE;
+  event.file = NULL;
+
+  SDL_PushEvent((SDL_Event *)&event);
+}
+
 boolean PendingEscapeKeyEvent(void)
 {
   if (PendingEvent())
index dc6d0f363d69f438b6e4c52cbafb2e8a5508eea2..51d783b77ffac3508c2755e187d885be7176412e 100644 (file)
@@ -1063,6 +1063,8 @@ struct OptionInfo
   char *identifier;
   char *level_nr;
 
+  char *drop_file;
+
   int display_nr;
 
   boolean mytapes;
@@ -2058,6 +2060,7 @@ KeyMod GetKeyModStateFromEvents(void);
 void StartTextInput(int, int, int, int);
 void StopTextInput(void);
 void PushUserEvent(int, int, int);
+void PushDropEvent(char *);
 boolean PendingEscapeKeyEvent(void);
 
 void InitJoysticks(void);
index 8ab7313dba3a77667264417e627d886e78cd1035..973d0c900785f36e6a2a9bddf2677f6c9d5a0379 100644 (file)
@@ -9062,6 +9062,7 @@ static void print_usage(void)
        "  -g, --graphics DIRECTORY         alternative graphics DIRECTORY\n"
        "  -s, --sounds DIRECTORY           alternative sounds DIRECTORY\n"
        "  -m, --music DIRECTORY            alternative music DIRECTORY\n"
+       "      --drop-file FILE             drop FILE into program window\n"
        "      --display NR                 open program window on display NR\n"
        "      --mytapes                    use private tapes for tape tests\n"
        "  -n, --network                    network multiplayer game\n"