X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fevents.c;h=f33b31169202c335e2bd30b789359515abe54262;hp=f3330a7ee318ece3e7578f01551a509161c4396f;hb=5f9b6d3b52c7f8dc10c01782d466a1e8f5ca5f26;hpb=0732b0680b5ce9468facaef0b7d9a50fc0894515 diff --git a/src/events.c b/src/events.c index f3330a7e..f33b3116 100644 --- a/src/events.c +++ b/src/events.c @@ -39,6 +39,8 @@ static int cursor_mode_last = CURSOR_DEFAULT; static unsigned int special_cursor_delay = 0; static unsigned int special_cursor_delay_value = 1000; +static boolean virtual_button_pressed = FALSE; + // forward declarations for internal use static void HandleNoEvent(void); @@ -266,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: @@ -722,6 +728,8 @@ static void HandleFingerEvent_VirtualButtons(FingerEvent *event) "KEY_PRESSED"); int i; + virtual_button_pressed = (key_status == KEY_PRESSED && key != KSYM_UNDEFINED); + // for any touch input event, enable overlay buttons (if activated) SetOverlayEnabled(TRUE); @@ -1518,9 +1526,47 @@ 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); + } +} + +static void HandleDropTextEventExt(char *text) +{ + 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) { - SDLHandleWindowManagerEvent(event); + HandleDropTextEventExt(event->drop.file); + + SDL_free(event->drop.file); } void HandleButton(int mx, int my, int button, int button_nr) @@ -1545,10 +1591,13 @@ void HandleButton(int mx, int my, int button, int button_nr) #if defined(PLATFORM_ANDROID) // when playing, only handle gadgets when using "follow finger" controls // or when using touch controls in combination with the MM game engine + // or when using gadgets that do not overlap with virtual buttons handle_gadgets = (game_status != GAME_MODE_PLAYING || level.game_engine_type == GAME_ENGINE_TYPE_MM || - strEqual(setup.touch.control_type, TOUCH_CONTROL_FOLLOW_FINGER)); + strEqual(setup.touch.control_type, TOUCH_CONTROL_FOLLOW_FINGER) || + (strEqual(setup.touch.control_type, TOUCH_CONTROL_VIRTUAL_BUTTONS) && + !virtual_button_pressed)); #endif if (HandleGlobalAnimClicks(mx, my, button)) @@ -1842,9 +1891,9 @@ boolean HandleKeysDebug(Key key, int key_status) return TRUE; } } +#endif return FALSE; -#endif } void HandleKey(Key key, int key_status) @@ -2353,6 +2402,16 @@ void HandleJoystick(void) return; } + if (newbutton && (game_status == GAME_MODE_PSEUDO_TYPENAME || + anyTextGadgetActive())) + { + // leave name input in main menu or text input gadget + HandleKey(KSYM_Escape, KEY_PRESSED); + HandleKey(KSYM_Escape, KEY_RELEASED); + + return; + } + if (level.game_engine_type == GAME_ENGINE_TYPE_MM) { if (game_status == GAME_MODE_PLAYING)