X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fevents.c;h=05d4b351e8b868b9307917dc4fcba7483fd0b3eb;hp=7b2ba984732b8fa857478f9bfc44d26d9259d041;hb=be5bf9c7912238465ec23cec535277ebc1a4a21b;hpb=0c08866e0fd391ec7e01562ad2ea3b5645ebfc13 diff --git a/src/events.c b/src/events.c index 7b2ba984..05d4b351 100644 --- a/src/events.c +++ b/src/events.c @@ -268,8 +268,12 @@ void HandleOtherEvents(Event *event) HandleJoystickEvent(event); break; - case SDL_SYSWMEVENT: - HandleWindowManagerEvent(event); + case SDL_DROPFILE: + HandleDropFileEvent(event); + break; + + case SDL_DROPTEXT: + HandleDropTextEvent(event); break; default: @@ -1522,9 +1526,63 @@ void HandleClientMessageEvent(ClientMessageEvent *event) CloseAllAndExit(0); } -void HandleWindowManagerEvent(Event *event) +static void HandleDropFileEventExt(char *filename) +{ + Error(ERR_DEBUG, "DROP FILE EVENT: '%s'", filename); + + // check and extract dropped zip files into correct user data directory + if (strSuffixLower(filename, ".zip")) + { + int tree_type = GetZipFileTreeType(filename); + char *directory = TREE_USERDIR(tree_type); + + if (directory == NULL) + { + Error(ERR_WARN, "zip file '%s' has invalid content!", filename); + + return; + } + + char *top_dir = ExtractZipFileIntoDirectory(filename, directory, tree_type); + + if (top_dir != NULL) + { + AddUserTreeSetToTreeInfo(top_dir, tree_type); + + // when adding new level set, select it as the new current level set + if (tree_type == TREE_TYPE_LEVEL_DIR) + { + // change current level set to newly added level set from zip file + leveldir_current = getTreeInfoFromIdentifier(leveldir_first, top_dir); + + // change current level number to first level of newly added level set + level_nr = leveldir_current->first_level; + + // when in main menu, redraw screen to reflect changed level set + if (game_status == GAME_MODE_MAIN) + DrawMainMenu(); + } + } + } +} + +static void HandleDropTextEventExt(char *text) { - SDLHandleWindowManagerEvent(event); + Error(ERR_DEBUG, "DROP TEXT EVENT: '%s'", text); +} + +void HandleDropFileEvent(Event *event) +{ + HandleDropFileEventExt(event->drop.file); + + SDL_free(event->drop.file); +} + +void HandleDropTextEvent(Event *event) +{ + HandleDropTextEventExt(event->drop.file); + + SDL_free(event->drop.file); } void HandleButton(int mx, int my, int button, int button_nr)