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

More hacking to make macOS happy...

Allow ALT+Arrow to resize from maximized by calling
SDL_RestoreWindow() first.  This should allow macOS users to escape
the weird window size mess it can start in.  Still no idea what is
actually happening there, but this should at least provide an "out"
now. :(
parent ae97eae2
No related branches found
No related tags found
No related merge requests found
......@@ -63,7 +63,7 @@ int sdl_ufunc_retval;
sem_t sdl_flush_sem;
int pending_updates=0;
int fullscreen=0;
int fullscreen = 0;
int sdl_init_good=0;
pthread_mutex_t sdl_keylock;
......@@ -395,7 +395,7 @@ int sdl_init(int mode)
bitmap_drv_init(sdl_drawrect, sdl_flush);
if(mode==CIOLIB_MODE_SDL_FULLSCREEN)
fullscreen=1;
fullscreen = 1;
// Needs to be *after* bitmap_drv_init()
#if defined(__DARWIN__)
sem_post(&startsdl_sem);
......@@ -924,24 +924,23 @@ void sdl_video_event_thread(void *data)
if ((ev.key.keysym.mod & KMOD_ALT) &&
(ev.key.keysym.sym == SDLK_LEFT ||
ev.key.keysym.sym == SDLK_RIGHT)) {
// Don't allow ALT-DIR to change size when maximized...
if ((sdl.GetWindowFlags(win) & SDL_WINDOW_MAXIMIZED) == 0) {
int w, h;
SDL_Rect r;
if (sdl.GetDisplayUsableBounds(0, &r) == 0) {
w = r.w;
h = r.h;
}
else {
w = 0;
h = 0;
}
pthread_mutex_lock(&vstatlock);
bitmap_snap(ev.key.keysym.sym == SDLK_RIGHT, w, h);
pthread_mutex_unlock(&vstatlock);
update_cvstat(&cvstat);
setup_surfaces(&cvstat);
if (sdl.GetWindowFlags(win) & SDL_WINDOW_MAXIMIZED)
sdl.RestoreWindow(win);
int w, h;
SDL_Rect r;
if (sdl.GetDisplayUsableBounds(0, &r) == 0) {
w = r.w;
h = r.h;
}
else {
w = 0;
h = 0;
}
pthread_mutex_lock(&vstatlock);
bitmap_snap(ev.key.keysym.sym == SDLK_RIGHT, w, h);
pthread_mutex_unlock(&vstatlock);
update_cvstat(&cvstat);
setup_surfaces(&cvstat);
break;
}
}
......@@ -1051,10 +1050,9 @@ void sdl_video_event_thread(void *data)
// Fall-through
case SDL_WINDOWEVENT_SIZE_CHANGED:
// SDL2: User resized window
case SDL_WINDOWEVENT_RESIZED: {
int flags = sdl.GetWindowFlags(win);
fullscreen = (flags & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_FULLSCREEN_DESKTOP)) != 0;
sdl.SetWindowResizable(win, (flags & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_FULLSCREEN_DESKTOP)) ? SDL_FALSE : SDL_TRUE);
case SDL_WINDOWEVENT_RESIZED:
fullscreen = !!(sdl.GetWindowFlags(win) & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_FULLSCREEN_DESKTOP));
sdl.SetWindowResizable(win, fullscreen ? SDL_FALSE : SDL_TRUE);
cio_api.mode=fullscreen?CIOLIB_MODE_SDL_FULLSCREEN:CIOLIB_MODE_SDL;
pthread_mutex_lock(&sdl_mode_mutex);
if (sdl_mode) {
......@@ -1064,7 +1062,6 @@ void sdl_video_event_thread(void *data)
pthread_mutex_unlock(&sdl_mode_mutex);
internal_setwinsize(&cvstat, false);
break;
}
case SDL_WINDOWEVENT_EXPOSED:
bitmap_drv_request_pixels();
break;
......
......@@ -214,6 +214,10 @@ int load_sdl_funcs(struct sdlfuncs *sdlf)
xp_dlclose(sdl_dll);
return(-1);
}
if((sdlf->RestoreWindow=xp_dlsym(sdl_dll, SDL_RestoreWindow))==NULL) {
xp_dlclose(sdl_dll);
return(-1);
}
#ifndef STATIC_SDL
{
int (HACK_HACK_HACK *ra)(char *name, Uint32 style, void *hInst);
......
......@@ -59,6 +59,7 @@ struct sdlfuncs {
void(HACK_HACK_HACK *free) (void *);
Uint32(HACK_HACK_HACK *GetWindowFlags) (SDL_Window * window);
int (HACK_HACK_HACK *GetDisplayUsableBounds) (int, SDL_Rect *);
void (HACK_HACK_HACK *RestoreWindow) (SDL_Window *);
int gotfuncs;
};
......
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