+ static boolean confirm_on_drop_complete = FALSE;
+ static int num_level_sets_succeeded = 0;
+ static int num_artwork_sets_succeeded = 0;
+ static int num_files_failed = 0;
+
+ switch (event->type)
+ {
+ case SDL_DROPBEGIN:
+ {
+ confirm_on_drop_complete = TRUE;
+ num_level_sets_succeeded = 0;
+ num_artwork_sets_succeeded = 0;
+ num_files_failed = 0;
+
+ break;
+ }
+
+ case SDL_DROPFILE:
+ {
+ int tree_type = HandleDropFileEvent(event->drop.file);
+
+ if (tree_type == TREE_TYPE_LEVEL_DIR)
+ num_level_sets_succeeded++;
+ else if (tree_type == TREE_TYPE_GRAPHICS_DIR ||
+ tree_type == TREE_TYPE_SOUNDS_DIR ||
+ tree_type == TREE_TYPE_MUSIC_DIR)
+ num_artwork_sets_succeeded++;
+ else
+ num_files_failed++;
+
+ // SDL_DROPBEGIN / SDL_DROPCOMPLETE did not exist in older SDL versions
+ if (!confirm_on_drop_complete)
+ {
+ // process all remaining events, including further SDL_DROPFILE events
+ ClearEventQueue();
+
+ HandleDropCompleteEvent(num_level_sets_succeeded,
+ num_artwork_sets_succeeded,
+ num_files_failed);
+
+ num_level_sets_succeeded = 0;
+ num_artwork_sets_succeeded = 0;
+ num_files_failed = 0;
+ }
+
+ break;
+ }
+
+ case SDL_DROPTEXT:
+ {
+ HandleDropTextEvent(event->drop.file);
+
+ break;
+ }
+
+ case SDL_DROPCOMPLETE:
+ {
+ HandleDropCompleteEvent(num_level_sets_succeeded,
+ num_artwork_sets_succeeded,
+ num_files_failed);
+
+ break;
+ }
+ }
+
+ if (event->drop.file != NULL)
+ SDL_free(event->drop.file);
+}
+
+void HandleUserEvent(UserEvent *event)
+{
+ switch (event->code)
+ {
+ case USEREVENT_ANIM_DELAY_ACTION:
+ case USEREVENT_ANIM_EVENT_ACTION:
+ // execute action functions until matching action was found
+ if (DoKeysymAction(event->value1) ||
+ DoGadgetAction(event->value1) ||
+ DoScreenAction(event->value1))
+ return;
+ break;
+
+ default:
+ break;
+ }