From 08d58aa99284295b54a546ca01cf3165190be7cd Mon Sep 17 00:00:00 2001 From: Lior Halphon Date: Fri, 11 Jul 2025 23:14:03 +0300 Subject: [PATCH] Fix a bug where controller-triggered rewind doesn't resume after reaching the buffer end --- iOS/GBViewController.m | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/iOS/GBViewController.m b/iOS/GBViewController.m index d663cb6..4bb11e8 100644 --- a/iOS/GBViewController.m +++ b/iOS/GBViewController.m @@ -723,7 +723,7 @@ static void rumbleCallback(GB_gameboy_t *gb, double amp) [_backgroundView fadeOverlayOut]; } else { - if (self.runMode == GBRunModeRewind && _runModeFromController) { + if ((self.runMode == GBRunModeRewind || self.runMode == GBRunModePaused) && _runModeFromController) { [self setRunMode:GBRunModeNormal]; _runModeFromController = false; } @@ -1354,14 +1354,22 @@ static void rumbleCallback(GB_gameboy_t *gb, double amp) GB_rewind_pop(&_gb); if ([[NSUserDefaults standardUserDefaults] boolForKey:@"GBDynamicSpeed"]) { if (!GB_rewind_pop(&_gb)) { - self.runMode = GBRunModePaused; + dispatch_sync(dispatch_get_main_queue(), ^{ + if (_runMode == GBRunModeRewind) { + self.runMode = GBRunModePaused; + } + }); _rewindOver = true; } } else { for (unsigned i = [[NSUserDefaults standardUserDefaults] integerForKey:@"GBRewindSpeed"]; i--;) { if (!GB_rewind_pop(&_gb)) { - self.runMode = GBRunModePaused; + dispatch_sync(dispatch_get_main_queue(), ^{ + if (_runMode == GBRunModeRewind) { + self.runMode = GBRunModePaused; + } + }); _rewindOver = true; } }