X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fevents.c;h=f769714ea10da1c7a6017d653d48cbbcdba1a0f5;hb=0c591c7613e7cfb5eed337233dcacad92be6e86d;hp=d56edaf9c38596a3c9933c15bbd26de96965c703;hpb=5b2e6a664e1fb401861c5a437ddecb26d59c245b;p=rocksndiamonds.git diff --git a/src/events.c b/src/events.c index d56edaf9..f769714e 100644 --- a/src/events.c +++ b/src/events.c @@ -128,6 +128,19 @@ static boolean SkipPressedMouseMotionEvent(const Event *event) return FALSE; } +static boolean WaitValidEvent(Event *event) +{ + WaitEvent(event); + + if (!FilterEvents(event)) + return FALSE; + + if (SkipPressedMouseMotionEvent(event)) + return FALSE; + + return TRUE; +} + /* this is especially needed for event modifications for the Android target: if mouse coordinates should be modified in the event filter function, using a properly installed SDL event filter does not work, because in @@ -139,20 +152,8 @@ static boolean SkipPressedMouseMotionEvent(const Event *event) boolean NextValidEvent(Event *event) { while (PendingEvent()) - { - boolean handle_this_event = FALSE; - - NextEvent(event); - - if (FilterEvents(event)) - handle_this_event = TRUE; - - if (SkipPressedMouseMotionEvent(event)) - handle_this_event = FALSE; - - if (handle_this_event) + if (WaitValidEvent(event)) return TRUE; - } return FALSE; } @@ -297,7 +298,8 @@ void HandleMouseCursor() cursor_inside_playfield && DelayReached(&special_cursor_delay, special_cursor_delay_value)) { - SetMouseCursor(CURSOR_PLAYFIELD); + if (level.game_engine_type != GAME_ENGINE_TYPE_MM) + SetMouseCursor(CURSOR_PLAYFIELD); } } else if (gfx.cursor_mode != CURSOR_DEFAULT) @@ -340,12 +342,10 @@ void EventLoop(void) void ClearEventQueue() { - while (PendingEvent()) - { - Event event; - - NextEvent(&event); + Event event; + while (NextValidEvent(&event)) + { switch (event.type) { case EVENT_BUTTONRELEASE: @@ -392,7 +392,8 @@ void SleepWhileUnmapped() { Event event; - NextEvent(&event); + if (!WaitValidEvent(&event)) + continue; switch (event.type) { @@ -1275,7 +1276,7 @@ void HandleButton(int mx, int my, int button, int button_nr) if (HandleGlobalAnimClicks(mx, my, button)) { /* do not handle this button event anymore */ - mx = my = -32; /* force mouse event to be outside screen tiles */ + return; /* force mouse event not to be handled at all */ } if (button_hold && game_status == GAME_MODE_PLAYING && tape.pausing) @@ -1323,9 +1324,12 @@ void HandleButton(int mx, int my, int button, int button_nr) HandleSetupScreen(mx, my, 0, 0, button); break; -#if defined(TARGET_SDL2) case GAME_MODE_PLAYING: - HandleFollowFinger(mx, my, button); + if (level.game_engine_type == GAME_ENGINE_TYPE_MM) + ClickElement(mx, my, button); +#if defined(TARGET_SDL2) + else + HandleFollowFinger(mx, my, button); #endif #ifdef DEBUG @@ -1892,7 +1896,9 @@ void HandleKey(Key key, int key_status) void HandleNoEvent() { // if (button_status && game_status != GAME_MODE_PLAYING) - if (button_status && (game_status != GAME_MODE_PLAYING || tape.pausing)) + if (button_status && (game_status != GAME_MODE_PLAYING || + tape.pausing || + level.game_engine_type == GAME_ENGINE_TYPE_MM)) { HandleButton(0, 0, button_status, -button_status); }