+ joystick.status = old_joystick_status;
+ }
+}
+
+void HandleClientMessageEvent(ClientMessageEvent *event)
+{
+ if (CheckCloseWindowEvent(event))
+ CloseAllAndExit(0);
+}
+
+void HandleWindowManagerEvent(Event *event)
+{
+#if defined(TARGET_SDL)
+ SDLHandleWindowManagerEvent(event);
+#endif
+}
+
+void HandleButton(int mx, int my, int button, int button_nr)
+{
+ static int old_mx = 0, old_my = 0;
+ boolean button_hold = FALSE;
+
+ if (button_nr < 0)
+ {
+ mx = old_mx;
+ my = old_my;
+ button_nr = -button_nr;
+ button_hold = TRUE;
+ }
+ else
+ {
+ old_mx = mx;
+ old_my = my;
+ }
+
+#if defined(PLATFORM_ANDROID)
+ // when playing, only handle gadgets when using "follow finger" controls
+ boolean handle_gadgets =
+ (game_status != GAME_MODE_PLAYING ||
+ strEqual(setup.touch.control_type, TOUCH_CONTROL_FOLLOW_FINGER));
+
+ if (handle_gadgets &&
+ HandleGadgets(mx, my, button))
+ {
+ /* do not handle this button event anymore */
+ mx = my = -32; /* force mouse event to be outside screen tiles */
+ }
+#else
+ if (HandleGadgets(mx, my, button))
+ {
+ /* do not handle this button event anymore */
+ mx = my = -32; /* force mouse event to be outside screen tiles */
+ }
+#endif
+
+ if (HandleGlobalAnimClicks(mx, my, button))
+ {
+ /* do not handle this button event anymore */
+ mx = my = -32; /* force mouse event to be outside screen tiles */
+ }
+
+ if (button_hold && game_status == GAME_MODE_PLAYING && tape.pausing)
+ return;
+
+ /* do not use scroll wheel button events for anything other than gadgets */
+ if (IS_WHEEL_BUTTON(button_nr))
+ return;
+
+ switch (game_status)
+ {
+ case GAME_MODE_TITLE:
+ HandleTitleScreen(mx, my, 0, 0, button);
+ break;
+
+ case GAME_MODE_MAIN:
+ HandleMainMenu(mx, my, 0, 0, button);
+ break;
+
+ case GAME_MODE_PSEUDO_TYPENAME:
+ HandleTypeName(0, KSYM_Return);
+ break;
+
+ case GAME_MODE_LEVELS:
+ HandleChooseLevelSet(mx, my, 0, 0, button);
+ break;
+
+ case GAME_MODE_LEVELNR:
+ HandleChooseLevelNr(mx, my, 0, 0, button);
+ break;
+
+ case GAME_MODE_SCORES:
+ HandleHallOfFame(0, 0, 0, 0, button);
+ break;
+
+ case GAME_MODE_EDITOR:
+ HandleLevelEditorIdle();
+ break;
+
+ case GAME_MODE_INFO:
+ HandleInfoScreen(mx, my, 0, 0, button);
+ break;
+
+ case GAME_MODE_SETUP:
+ HandleSetupScreen(mx, my, 0, 0, button);
+ break;
+
+#if defined(TARGET_SDL2)
+ case GAME_MODE_PLAYING:
+ HandleFollowFinger(mx, my, button);
+#endif
+
+#ifdef DEBUG
+ if (button == MB_PRESSED && !motion_status && IN_GFX_FIELD_PLAY(mx, my) &&
+ GetKeyModState() & KMOD_Control)
+ DumpTileFromScreen(mx, my);
+#endif
+
+ break;
+
+ default:
+ break;