diff --git a/video/out/w32_common.c b/video/out/w32_common.c index 13eeea06097f..f26a6fc6946f 100644 --- a/video/out/w32_common.c +++ b/video/out/w32_common.c @@ -1081,7 +1081,7 @@ static void update_fullscreen_state(struct vo_w32_state *w32) m_config_cache_write_opt(w32->opts_cache, &w32->opts->fullscreen); - if (toggle_fs) { + if (toggle_fs && !w32->opts->window_maximized) { if (w32->current_fs) { // Save window rect when switching to fullscreen. w32->prev_windowrc = w32->windowrc; @@ -1116,6 +1116,8 @@ static void update_minimized_state(struct vo_w32_state *w32) } } +static void update_window_state(struct vo_w32_state *w32); + static void update_maximized_state(struct vo_w32_state *w32, bool leaving_fullscreen) { if (w32->parent) @@ -1127,6 +1129,8 @@ static void update_maximized_state(struct vo_w32_state *w32, bool leaving_fullsc if (w32->current_fs && !leaving_fullscreen) return; + bool toggle = !w32->opts->window_maximized && IsMaximized(w32->window); + WINDOWPLACEMENT wp = { .length = sizeof wp }; GetWindowPlacement(w32->window, &wp); @@ -1146,6 +1150,11 @@ static void update_maximized_state(struct vo_w32_state *w32, bool leaving_fullsc ShowWindow(w32->window, SW_SHOWNOACTIVATE); } } + + if (toggle && !w32->current_fs) { + w32->windowrc = w32->prev_windowrc; + update_window_state(w32); + } } static bool is_visible(HWND window) @@ -2291,7 +2300,8 @@ static int gui_thread_control(struct vo_w32_state *w32, int request, void *arg) if (!w32->window_bounds_initialized) return VO_FALSE; - RECT *rc = w32->current_fs ? &w32->prev_windowrc : &w32->windowrc; + RECT *rc = (w32->current_fs || w32->opts->window_maximized) + ? &w32->prev_windowrc : &w32->windowrc; s[0] = rect_w(*rc); s[1] = rect_h(*rc); return VO_TRUE; @@ -2305,7 +2315,7 @@ static int gui_thread_control(struct vo_w32_state *w32, int request, void *arg) RECT *rc = w32->current_fs ? &w32->prev_windowrc : &w32->windowrc; resize_and_move_rect(w32, rc, s[0], s[1]); - if (w32->opts->window_maximized) { + if (w32->opts->window_maximized && !w32->current_fs) { w32->unmaximize = true; } w32->fit_on_screen = true;