diff --git a/app/src/screen.c b/app/src/screen.c index 0af8de83..7f0bd7ac 100644 --- a/app/src/screen.c +++ b/app/src/screen.c @@ -15,6 +15,18 @@ #define DISPLAY_MARGINS 96 +static bool +is_maximized(const struct screen *screen) { + uint32_t flags = SDL_GetWindowFlags(screen->window); + return !!(flags & SDL_WINDOW_MAXIMIZED); +} + +static bool +is_fullscreen(const struct screen *screen) { + uint32_t flags = SDL_GetWindowFlags(screen->window); + return !!(flags & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_FULLSCREEN_DESKTOP)); +} + static inline struct size get_rotated_size(struct size size, int rotation) { struct size rotated_size; @@ -44,7 +56,7 @@ get_window_size(SDL_Window *window) { // get the windowed window size static struct size get_windowed_window_size(const struct screen *screen) { - if (screen->fullscreen || screen->maximized) { + if (is_fullscreen(screen) || is_maximized(screen)) { return screen->windowed_window_size; } return get_window_size(screen->window); @@ -53,7 +65,7 @@ get_windowed_window_size(const struct screen *screen) { // apply the windowed window size if fullscreen and maximized are disabled static void apply_windowed_size(struct screen *screen) { - if (!screen->fullscreen && !screen->maximized) { + if (!is_fullscreen(screen) && !is_maximized(screen)) { SDL_SetWindowSize(screen->window, screen->windowed_window_size.width, screen->windowed_window_size.height); } @@ -471,28 +483,27 @@ screen_render(struct screen *screen) { void screen_switch_fullscreen(struct screen *screen) { - uint32_t new_mode = screen->fullscreen ? 0 : SDL_WINDOW_FULLSCREEN_DESKTOP; + bool was_fullscreen = is_fullscreen(screen); + uint32_t new_mode = was_fullscreen ? 0 : SDL_WINDOW_FULLSCREEN_DESKTOP; if (SDL_SetWindowFullscreen(screen->window, new_mode)) { LOGW("Could not switch fullscreen mode: %s", SDL_GetError()); return; } - screen->fullscreen = !screen->fullscreen; apply_windowed_size(screen); - LOGD("Switched to %s mode", screen->fullscreen ? "fullscreen" : "windowed"); + LOGD("Switched to %s mode", was_fullscreen ? "windowed" : "fullscreen"); screen_render(screen); } void screen_resize_to_fit(struct screen *screen) { - if (screen->fullscreen) { + if (is_fullscreen(screen)) { return; } - if (screen->maximized) { + if (is_maximized(screen)) { SDL_RestoreWindow(screen->window); - screen->maximized = false; } struct size optimal_size = @@ -504,13 +515,12 @@ screen_resize_to_fit(struct screen *screen) { void screen_resize_to_pixel_perfect(struct screen *screen) { - if (screen->fullscreen) { + if (is_fullscreen(screen)) { return; } - if (screen->maximized) { + if (is_maximized(screen)) { SDL_RestoreWindow(screen->window); - screen->maximized = false; } struct size content_size = screen->content_size; @@ -527,7 +537,7 @@ screen_handle_window_event(struct screen *screen, screen_render(screen); break; case SDL_WINDOWEVENT_SIZE_CHANGED: - if (!screen->fullscreen && !screen->maximized) { + if (!is_fullscreen(screen) && !is_maximized(screen)) { // Backup the previous size: if we receive the MAXIMIZED event, // then the new size must be ignored (it's the maximized size). // We could not rely on the window flags due to race conditions @@ -552,10 +562,8 @@ screen_handle_window_event(struct screen *screen, screen->windowed_window_size_backup.width = 0; screen->windowed_window_size_backup.height = 0; #endif - screen->maximized = true; break; case SDL_WINDOWEVENT_RESTORED: - screen->maximized = false; apply_windowed_size(screen); break; } diff --git a/app/src/screen.h b/app/src/screen.h index 85514279..39b2f9f4 100644 --- a/app/src/screen.h +++ b/app/src/screen.h @@ -29,8 +29,6 @@ struct screen { // client rotation: 0, 1, 2 or 3 (x90 degrees counterclockwise) unsigned rotation; bool has_frame; - bool fullscreen; - bool maximized; bool no_window; bool mipmaps; }; @@ -59,8 +57,6 @@ struct screen { }, \ .rotation = 0, \ .has_frame = false, \ - .fullscreen = false, \ - .maximized = false, \ .no_window = false, \ .mipmaps = false, \ }