diff --git a/src/conio/sdl_con.c b/src/conio/sdl_con.c index e5c3f3dcae5e05413bdc84d8bb5f492e0736d712..83815ae99b01611395e67c955ca283817901fd54 100644 --- a/src/conio/sdl_con.c +++ b/src/conio/sdl_con.c @@ -454,9 +454,10 @@ int sdl_init(int mode) return(-1); } -static void internal_setwinsize(struct video_stats *vs) +static void internal_setwinsize(struct video_stats *vs, bool force) { int w, h; + bool changed = true; w = vs->winwidth; h = vs->winheight; @@ -469,11 +470,16 @@ static void internal_setwinsize(struct video_stats *vs) if (h < vs->scrnheight) h = vs->scrnheight; pthread_mutex_lock(&vstatlock); - vs->winwidth = vstat.winwidth = w; - vs->winheight = vstat.winheight = h; + if (w == vstat.winwidth && h == vstat.winheight) + changed = force; + else { + vs->winwidth = vstat.winwidth = w; + vs->winheight = vstat.winheight = h; + } pthread_mutex_unlock(&vstatlock); internal_scaling = window_can_scale_internally(vs); - setup_surfaces_locked(vs); + if (changed) + setup_surfaces_locked(vs); } void sdl_setwinsize(int w, int h) @@ -1037,7 +1043,7 @@ void sdl_video_event_thread(void *data) break; } pthread_mutex_unlock(&sdl_mode_mutex); - internal_setwinsize(&cvstat); + internal_setwinsize(&cvstat, false); break; case SDL_WINDOWEVENT_EXPOSED: bitmap_drv_request_pixels(); @@ -1197,7 +1203,7 @@ void sdl_video_event_thread(void *data) pthread_mutex_lock(&vstatlock); cvstat = vstat; pthread_mutex_unlock(&vstatlock); - internal_setwinsize(&cvstat); + internal_setwinsize(&cvstat, true); sdl_ufunc_retval=0; sem_post(&sdl_ufunc_ret); break;