From a7abe93f32b113fc642de6c2dfa1bc8dfc687e8f Mon Sep 17 00:00:00 2001 From: FPabl0 Date: Tue, 9 Feb 2021 17:38:13 -0500 Subject: [PATCH] fix file dialog resize method, ensure popup overlays are refreshed when windows is created and resized, fixes #1692 when #1931 is landed --- dialog/file.go | 30 ++++++++++++++++-------------- internal/driver/glfw/canvas.go | 3 ++- internal/driver/glfw/window.go | 8 ++++++++ widget/popup.go | 4 +++- 4 files changed, 29 insertions(+), 16 deletions(-) diff --git a/dialog/file.go b/dialog/file.go index 5ac471ab2d..98ac051f24 100644 --- a/dialog/file.go +++ b/dialog/file.go @@ -476,21 +476,23 @@ func (f *FileDialog) Resize(size fyne.Size) { if f.dialog == nil { return } - maxSize := f.dialog.win.Size() minSize := f.dialog.win.MinSize() - newWidth := size.Width - if size.Width > maxSize.Width { - newWidth = maxSize.Width - } else if size.Width < minSize.Width { - newWidth = minSize.Width - } - newHeight := size.Height - if size.Height > maxSize.Height { - newHeight = maxSize.Height - } else if size.Height < minSize.Height { - newHeight = minSize.Height - } - f.dialog.win.Resize(fyne.NewSize(newWidth, newHeight)) + f.dialog.win.Resize(minSize.Max(size)) + // maxSize := f.dialog.win.Size() + // minSize := f.dialog.win.MinSize() + // newWidth := size.Width + // if size.Width > maxSize.Width { + // newWidth = maxSize.Width + // } else if size.Width < minSize.Width { + // newWidth = minSize.Width + // } + // newHeight := size.Height + // if size.Height > maxSize.Height { + // newHeight = maxSize.Height + // } else if size.Height < minSize.Height { + // newHeight = minSize.Height + // } + // f.dialog.win.Resize(fyne.NewSize(newWidth, newHeight)) } // Hide hides the file dialog. diff --git a/internal/driver/glfw/canvas.go b/internal/driver/glfw/canvas.go index 265763cc3f..9b3a2e605e 100644 --- a/internal/driver/glfw/canvas.go +++ b/internal/driver/glfw/canvas.go @@ -178,7 +178,8 @@ func (c *glCanvas) Resize(size fyne.Size) { if p, ok := overlay.(*widget.PopUp); ok { // TODO: remove this when #707 is being addressed. // “Notifies” the PopUp of the canvas size change. - p.Resize(p.Content.Size().Add(fyne.NewSize(theme.Padding()*2, theme.Padding()*2))) + // fmt.Printf("%#v ,canvas resize: %v\n", p, p.Content.Size()) + p.Refresh() } else { overlay.Resize(size) } diff --git a/internal/driver/glfw/window.go b/internal/driver/glfw/window.go index baf63bffbd..f734c220b3 100644 --- a/internal/driver/glfw/window.go +++ b/internal/driver/glfw/window.go @@ -402,6 +402,14 @@ func (w *window) doShow() { if w.canvas.Content() != nil { w.canvas.Content().Show() } + + // Refresh popup overlays + for _, overlay := range w.canvas.Overlays().List() { + if _, ok := overlay.(*widget.PopUp); !ok { + continue + } + overlay.Refresh() + } } func (w *window) Hide() { diff --git a/widget/popup.go b/widget/popup.go index 848f33e321..799e3bb32f 100644 --- a/widget/popup.go +++ b/widget/popup.go @@ -47,8 +47,10 @@ func (p *PopUp) Move(pos fyne.Position) { // // Implements: fyne.Widget func (p *PopUp) Resize(size fyne.Size) { + canvasSize := p.Canvas.Size() p.innerSize = size - p.BaseWidget.Resize(p.Canvas.Size()) + p.Content.Resize(p.innerSize.Subtract(fyne.NewSize(theme.Padding()*2, theme.Padding()*2))) + p.BaseWidget.Resize(canvasSize) // The canvas size might not have changed and therefore the Resize won't trigger a layout. // Until we have a widget.Relayout() or similar, the renderer's refresh will do the re-layout. p.Refresh()