From 4990cef43cb1cddf28909d6497f4d38376f7a425 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Sun, 9 Jul 2023 19:21:35 +0200 Subject: [PATCH] Reposition windows when the display resolution changes. --- display/window.c | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/display/window.c b/display/window.c index 7b70a51f..51f9065c 100644 --- a/display/window.c +++ b/display/window.c @@ -323,18 +323,39 @@ void window_destroy(struct window* window) void window_on_display_resolution_change(struct window* window, struct display* display) { - // TODO: Move window back inside screen. - if ( window->window_state == WINDOW_STATE_MAXIMIZED ) + switch ( window->window_state ) { - // TODO: Change size of maximized window. - (void) display; + case WINDOW_STATE_REGULAR: + { + ssize_t left = window->left, top = window->top; + if ( (ssize_t) display->screen_width <= left ) + left = 0; + if ( (ssize_t) display->screen_height <= top ) + top = 0; + window_move(window, left, top); + break; + } + case WINDOW_STATE_MAXIMIZED: window_maximize(window); break; + case WINDOW_STATE_MINIMIZED: break; + case WINDOW_STATE_TILE_LEFT: window_tile_left(window); break; + case WINDOW_STATE_TILE_RIGHT: window_tile_right(window); break; + case WINDOW_STATE_TILE_TOP: window_tile_top(window); break; + case WINDOW_STATE_TILE_TOP_LEFT: window_tile_top_left(window); break; + case WINDOW_STATE_TILE_TOP_RIGHT: window_tile_top_right(window); break; + case WINDOW_STATE_TILE_BOTTOM: window_tile_bottom(window); break; + case WINDOW_STATE_TILE_BOTTOM_LEFT: window_tile_bottom_left(window); break; + case WINDOW_STATE_TILE_BOTTOM_RIGHT: + window_tile_bottom_right(window); + break; } } void window_tile(struct window* window, enum window_state state, size_t left, size_t top, size_t width, size_t height) { - if ( window->window_state == state ) + if ( window->window_state == state && + window->left == (ssize_t) left && window->top == (ssize_t) top && + window->width == width && window->height == height ) return; if ( window->window_state == WINDOW_STATE_REGULAR )