diff --git a/internal/uidriver/glfw/ui.go b/internal/uidriver/glfw/ui.go index 599ef543d..c84b6d3bf 100644 --- a/internal/uidriver/glfw/ui.go +++ b/internal/uidriver/glfw/ui.go @@ -1208,15 +1208,22 @@ func (u *UserInterface) setWindowSize(width, height int, fullscreen bool) { ch <- struct{}{} }) u.window.SetSize(newW, newH) - if w, h := u.window.GetSize(); w != oldW || h != oldH { - event: - for { - glfw.PollEvents() - select { - case <-ch: - break event - default: - } + // Just after SetSize, GetSize is not reliable especially on Linux/Windows. + // Let's wait for FramebufferSize callback in any cases. + + // Use the timeout as FramebufferSize event might not be fired (#1618). + t := time.NewTimer(time.Second) + defer t.Stop() + + event: + for { + glfw.PollEvents() + select { + case <-ch: + break event + case <-t.C: + break event + default: } } u.window.SetFramebufferSizeCallback(nil)