diff --git a/firmware/drivers/button_queue.c b/firmware/drivers/button_queue.c index 68748d1fc0..85ad251443 100644 --- a/firmware/drivers/button_queue.c +++ b/firmware/drivers/button_queue.c @@ -23,7 +23,7 @@ #include "kernel.h" #include "button.h" #ifdef HAVE_SDL -#include "button-sdl.h" +#include "SDL.h" #include "window-sdl.h" #endif @@ -101,7 +101,7 @@ static inline void button_queue_wait(struct queue_event *evp, int timeout) unsigned long curr_tick, remaining; while(true) { - handle_sdl_events(); /* Includes window updates after resize events */ + SDL_PumpEvents(); queue_wait_w_tmo(&button_queue, evp, TIMEOUT_NOBLOCK); if (evp->id != SYS_TIMEOUT || timeout == TIMEOUT_NOBLOCK) return; diff --git a/firmware/target/hosted/sdl/button-sdl.c b/firmware/target/hosted/sdl/button-sdl.c index 7364aefd3a..369a5b209f 100644 --- a/firmware/target/hosted/sdl/button-sdl.c +++ b/firmware/target/hosted/sdl/button-sdl.c @@ -382,11 +382,11 @@ static bool event_handler(SDL_Event *event) } #ifdef __APPLE__ -void handle_sdl_events(void) +int sdl_event_filter(void *userdata, SDL_Event * event) { - SDL_Event event; - while(SDL_PollEvent(&event)) - event_handler(&event); + (void) userdata; + event_handler(event); + return 0; } #endif diff --git a/firmware/target/hosted/sdl/button-sdl.h b/firmware/target/hosted/sdl/button-sdl.h index dd6322c884..1dfc0b7828 100644 --- a/firmware/target/hosted/sdl/button-sdl.h +++ b/firmware/target/hosted/sdl/button-sdl.h @@ -25,11 +25,12 @@ #include #include "config.h" +#include "SDL.h" extern int sdl_app_has_input_focus; #ifdef __APPLE__ -void handle_sdl_events(void); +int sdl_event_filter(void *userdata, SDL_Event * event); #endif bool button_hold(void); diff --git a/firmware/target/hosted/sdl/system-sdl.c b/firmware/target/hosted/sdl/system-sdl.c index 98e610b3b1..af067d8e86 100644 --- a/firmware/target/hosted/sdl/system-sdl.c +++ b/firmware/target/hosted/sdl/system-sdl.c @@ -33,6 +33,7 @@ #include "system-sdl.h" #include "sim-ui-defines.h" #include "window-sdl.h" +#include "button-sdl.h" #include "lcd-bitmap.h" #ifdef HAVE_REMOTE_LCD #include "lcd-remote-bitmap.h" @@ -235,6 +236,8 @@ void system_init(void) SDL_SemWait(s); /* cleanup */ SDL_DestroySemaphore(s); +#else + SDL_AddEventWatch(sdl_event_filter, NULL); #endif } diff --git a/firmware/target/hosted/sdl/window-sdl.c b/firmware/target/hosted/sdl/window-sdl.c index cbb38386c1..fce800d471 100644 --- a/firmware/target/hosted/sdl/window-sdl.c +++ b/firmware/target/hosted/sdl/window-sdl.c @@ -81,8 +81,10 @@ static void restore_aspect_ratio(int w, int h) SDL_GetWindowSize(sdlWindow, &w, &h); if (w != original_width || h != original_height) { + SDL_DisplayMode sdl_dm; h = w * aspect_ratio; - SDL_SetWindowSize(sdlWindow, w, h); + if (SDL_GetCurrentDisplayMode(0, &sdl_dm) || h <= sdl_dm.h) + SDL_SetWindowSize(sdlWindow, w, h); } } #endif