From edcf49c63a7fb6fa87ef15e5bfe916f85c78e754 Mon Sep 17 00:00:00 2001 From: dannye <33dannye@gmail.com> Date: Sun, 24 Nov 2024 13:02:44 -0600 Subject: Windows: Fix rescale bug while window is fullscreen Possible via the Win+Shift+Left/Right keyboard shortcuts --- src/Fl_win32.cxx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Fl_win32.cxx b/src/Fl_win32.cxx index 2b077748e..a8fde1162 100644 --- a/src/Fl_win32.cxx +++ b/src/Fl_win32.cxx @@ -1961,6 +1961,13 @@ int Fl_WinAPI_Window_Driver::fake_X_wm(int &X, int &Y, int &bt, int &bx, int &by //////////////////////////////////////////////////////////////// +static void delayed_fullscreen(Fl_Window *win) { + Fl::remove_check((Fl_Timeout_Handler)delayed_fullscreen, win); + win->fullscreen_off(); + win->fullscreen(); +} + + static void delayed_maximize(Fl_Window *win) { Fl::remove_check((Fl_Timeout_Handler)delayed_maximize, win); win->un_maximize(); @@ -1969,10 +1976,12 @@ static void delayed_maximize(Fl_Window *win) { void Fl_WinAPI_Window_Driver::resize(int X, int Y, int W, int H) { - if (Fl_Window::is_a_rescale() && pWindow->maximize_active()) { +//fprintf(stderr, "resize w()=%d W=%d h()=%d H=%d\n",pWindow->w(), W,pWindow->h(), H); + if (Fl_Window::is_a_rescale() && pWindow->fullscreen_active()) { + Fl::add_check((Fl_Timeout_Handler)delayed_fullscreen, pWindow); + } else if (Fl_Window::is_a_rescale() && pWindow->maximize_active()) { Fl::add_check((Fl_Timeout_Handler)delayed_maximize, pWindow); } -//fprintf(stderr, "resize w()=%d W=%d h()=%d H=%d\n",pWindow->w(), W,pWindow->h(), H); UINT flags = SWP_NOSENDCHANGING | SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOOWNERZORDER; int is_a_resize = (W != w() || H != h() || Fl_Window::is_a_rescale()); int resize_from_program = (pWindow != resize_bug_fix); -- cgit v1.2.3