diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index dadc6abb..cef00628 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -151,6 +151,7 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { if (event->type == SDL_EVENT_WINDOW_CLOSE_REQUESTED) { + callback.paused = false; callback.emu_running = false; } else if (event->type == SDL_EVENT_WINDOW_RESIZED && callback.emu_running) @@ -174,6 +175,12 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) callback.enable_speedlimiter = !callback.enable_speedlimiter; } break; + case SDL_SCANCODE_P: + if (event->key.mod & SDL_KMOD_ALT) + { + callback.paused = !callback.paused; + } + break; case SDL_SCANCODE_ESCAPE: if (gfx_info.fullscreen) callback.emu_running = false; @@ -281,6 +288,7 @@ void rdp_init(void *_window, GFX_INFO _gfx_info) callback.emu_running = true; callback.enable_speedlimiter = true; + callback.paused = false; crop_letterbox = false; } diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index cba7e757..b26933aa 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -33,6 +33,7 @@ extern "C" bool enable_speedlimiter; bool lower_volume; bool raise_volume; + bool paused; } CALL_BACK; void rdp_init(void *_window, GFX_INFO _gfx_info); diff --git a/src/ui/video.rs b/src/ui/video.rs index da01f01c..ef2a8fc9 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -124,7 +124,7 @@ pub fn load_state(device: &mut device::Device, rdp_state: *const u8) { pub fn check_callback(device: &mut device::Device) -> bool { let mut speed_limiter_toggled = false; - let callback = unsafe { rdp_check_callback() }; + let mut callback = unsafe { rdp_check_callback() }; device.cpu.running = callback.emu_running; if device.netplay.is_none() { if callback.save_state { @@ -136,6 +136,11 @@ pub fn check_callback(device: &mut device::Device) -> bool { speed_limiter_toggled = true; device.vi.enable_speed_limiter = callback.enable_speedlimiter; } + while callback.paused { + std::thread::sleep(std::time::Duration::from_secs_f64(1.0 / 60.0)); + unsafe { sdl3_sys::events::SDL_PumpEvents() }; + callback = unsafe { rdp_check_callback() }; + } } if callback.lower_volume {