Skip to content
Snippets Groups Projects
Commit 83287170 authored by Deucе's avatar Deucе :ok_hand_tone4:
Browse files

On a window resize event, only set the window size if it's different

Fixes issue on Linux where the window size is constantly updated,
and window rabidly steals focus.
parent cece8b67
No related branches found
No related tags found
1 merge request!463MRC mods by Codefenix (2024-10-20)
Pipeline #4120 failed
...@@ -454,9 +454,10 @@ int sdl_init(int mode) ...@@ -454,9 +454,10 @@ int sdl_init(int mode)
return(-1); return(-1);
} }
static void internal_setwinsize(struct video_stats *vs) static void internal_setwinsize(struct video_stats *vs, bool force)
{ {
int w, h; int w, h;
bool changed = true;
w = vs->winwidth; w = vs->winwidth;
h = vs->winheight; h = vs->winheight;
...@@ -469,11 +470,16 @@ static void internal_setwinsize(struct video_stats *vs) ...@@ -469,11 +470,16 @@ static void internal_setwinsize(struct video_stats *vs)
if (h < vs->scrnheight) if (h < vs->scrnheight)
h = vs->scrnheight; h = vs->scrnheight;
pthread_mutex_lock(&vstatlock); pthread_mutex_lock(&vstatlock);
vs->winwidth = vstat.winwidth = w; if (w == vstat.winwidth && h == vstat.winheight)
vs->winheight = vstat.winheight = h; changed = force;
else {
vs->winwidth = vstat.winwidth = w;
vs->winheight = vstat.winheight = h;
}
pthread_mutex_unlock(&vstatlock); pthread_mutex_unlock(&vstatlock);
internal_scaling = window_can_scale_internally(vs); internal_scaling = window_can_scale_internally(vs);
setup_surfaces_locked(vs); if (changed)
setup_surfaces_locked(vs);
} }
void sdl_setwinsize(int w, int h) void sdl_setwinsize(int w, int h)
...@@ -1037,7 +1043,7 @@ void sdl_video_event_thread(void *data) ...@@ -1037,7 +1043,7 @@ void sdl_video_event_thread(void *data)
break; break;
} }
pthread_mutex_unlock(&sdl_mode_mutex); pthread_mutex_unlock(&sdl_mode_mutex);
internal_setwinsize(&cvstat); internal_setwinsize(&cvstat, false);
break; break;
case SDL_WINDOWEVENT_EXPOSED: case SDL_WINDOWEVENT_EXPOSED:
bitmap_drv_request_pixels(); bitmap_drv_request_pixels();
...@@ -1197,7 +1203,7 @@ void sdl_video_event_thread(void *data) ...@@ -1197,7 +1203,7 @@ void sdl_video_event_thread(void *data)
pthread_mutex_lock(&vstatlock); pthread_mutex_lock(&vstatlock);
cvstat = vstat; cvstat = vstat;
pthread_mutex_unlock(&vstatlock); pthread_mutex_unlock(&vstatlock);
internal_setwinsize(&cvstat); internal_setwinsize(&cvstat, true);
sdl_ufunc_retval=0; sdl_ufunc_retval=0;
sem_post(&sdl_ufunc_ret); sem_post(&sdl_ufunc_ret);
break; break;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment