forked from AuroraMiddleware/gtk
GdkWin32: Configure as needed when going fullscreen
Apply the fixes made by Chun-Wei Fan in [1] also for fullscreening / unfullscreen. Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/4631 Also set the SWP_FRAMECHANGED flag as written by Raymond Chen in "How do I switch a window between normal and fullscreen?" [2] > An important flag to pass here is SWP_FRAMECHANGED, which tells > the window manager to recalculate the window decorations (which we > need it to do because we just changed them). References: [1] - https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/3712 [2] - https://devblogs.microsoft.com/oldnewthing/20100412-00/?p=14353
This commit is contained in:
parent
f41fe7b8e4
commit
ab65e8e178
@ -4152,6 +4152,9 @@ gdk_win32_surface_fullscreen (GdkSurface *window)
|
|||||||
g_object_set_data (G_OBJECT (window), "fullscreen-info", fi);
|
g_object_set_data (G_OBJECT (window), "fullscreen-info", fi);
|
||||||
fi->style = GetWindowLong (GDK_SURFACE_HWND (window), GWL_STYLE);
|
fi->style = GetWindowLong (GDK_SURFACE_HWND (window), GWL_STYLE);
|
||||||
|
|
||||||
|
impl->inhibit_configure = TRUE;
|
||||||
|
impl->force_recompute_size = FALSE;
|
||||||
|
|
||||||
/* Send state change before configure event */
|
/* Send state change before configure event */
|
||||||
gdk_synthesize_surface_state (window, 0, GDK_TOPLEVEL_STATE_FULLSCREEN);
|
gdk_synthesize_surface_state (window, 0, GDK_TOPLEVEL_STATE_FULLSCREEN);
|
||||||
|
|
||||||
@ -4160,7 +4163,7 @@ gdk_win32_surface_fullscreen (GdkSurface *window)
|
|||||||
|
|
||||||
API_CALL (SetWindowPos, (GDK_SURFACE_HWND (window), HWND_TOP,
|
API_CALL (SetWindowPos, (GDK_SURFACE_HWND (window), HWND_TOP,
|
||||||
x, y, width, height,
|
x, y, width, height,
|
||||||
SWP_NOCOPYBITS | SWP_SHOWWINDOW));
|
SWP_NOCOPYBITS | SWP_SHOWWINDOW | SWP_FRAMECHANGED));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4184,11 +4187,17 @@ gdk_win32_surface_unfullscreen (GdkSurface *window)
|
|||||||
API_CALL (SetWindowPos, (GDK_SURFACE_HWND (window), HWND_NOTOPMOST,
|
API_CALL (SetWindowPos, (GDK_SURFACE_HWND (window), HWND_NOTOPMOST,
|
||||||
fi->r.left, fi->r.top,
|
fi->r.left, fi->r.top,
|
||||||
fi->r.right - fi->r.left, fi->r.bottom - fi->r.top,
|
fi->r.right - fi->r.left, fi->r.bottom - fi->r.top,
|
||||||
SWP_NOCOPYBITS | SWP_SHOWWINDOW));
|
SWP_NOCOPYBITS | SWP_SHOWWINDOW | SWP_FRAMECHANGED));
|
||||||
|
|
||||||
g_object_set_data (G_OBJECT (window), "fullscreen-info", NULL);
|
g_object_set_data (G_OBJECT (window), "fullscreen-info", NULL);
|
||||||
g_free (fi);
|
g_free (fi);
|
||||||
_gdk_win32_surface_update_style_bits (window);
|
_gdk_win32_surface_update_style_bits (window);
|
||||||
|
|
||||||
|
if (impl->inhibit_configure)
|
||||||
|
{
|
||||||
|
impl->inhibit_configure = FALSE;
|
||||||
|
impl->force_recompute_size = TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user