From 16fd76f0aa38cc04a9478e2fbd0cf418502b401c Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Sun, 23 Jun 2024 08:28:27 -0700 Subject: [PATCH] try a better way to work around initial occasional window misdrawing on Linux --- main.go | 15 ++++++++------- ui/mainwindow.go | 23 +++++++++++++---------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/main.go b/main.go index 513bef5..0b568ed 100644 --- a/main.go +++ b/main.go @@ -50,19 +50,20 @@ func main() { myApp.OnExit = mainWindow.Quit go func() { + defaultServer := myApp.ServerManager.GetDefaultServer() + if defaultServer == nil { + mainWindow.Controller.PromptForFirstServer() + } else { + mainWindow.Controller.DoConnectToServerWorkflow(defaultServer) + } // TODO: There is a race condition with laying out the window before the // window creation animation on Ubuntu (and other DEs?) finishes, where // the window will be misdrawn into a smaller area if the animation hasn't finished. // This makes it much less likely to occur (not seen on dozens of startups) // but is a hacky "solution"! if runtime.GOOS == "linux" { - time.Sleep(250 * time.Millisecond) - } - defaultServer := myApp.ServerManager.GetDefaultServer() - if defaultServer == nil { - mainWindow.Controller.PromptForFirstServer() - } else { - mainWindow.Controller.DoConnectToServerWorkflow(defaultServer) + time.Sleep(350 * time.Millisecond) + mainWindow.ForceResize() } }() diff --git a/ui/mainwindow.go b/ui/mainwindow.go index 10b2111..e645f76 100644 --- a/ui/mainwindow.go +++ b/ui/mainwindow.go @@ -89,16 +89,7 @@ func NewMainWindow(fyneApp fyne.App, appName, displayAppName, appVersion string, m.BottomPanel = NewBottomPanel(app.PlaybackManager, app.ImageManager, m.Controller) m.container = container.NewBorder(nil, m.BottomPanel, nil, nil, m.BrowsingPane) m.Window.SetContent(m.container) - - w := float32(app.Config.Application.WindowWidth) - if w <= 1 { - w = 1000 - } - h := float32(app.Config.Application.WindowHeight) - if h <= 1 { - h = 800 - } - m.Window.Resize(fyne.NewSize(w, h)) + m.ForceResize() app.PlaybackManager.OnSongChange(func(item mediaprovider.MediaItem, _ *mediaprovider.Track) { if item == nil { m.Window.SetTitle(displayAppName) @@ -150,6 +141,18 @@ func NewMainWindow(fyneApp fyne.App, appName, displayAppName, appVersion string, return m } +func (m *MainWindow) ForceResize() { + w := float32(m.App.Config.Application.WindowWidth) + if w <= 1 { + w = 1000 + } + h := float32(m.App.Config.Application.WindowHeight) + if h <= 1 { + h = 800 + } + m.Window.Resize(fyne.NewSize(w, h)) +} + func (m *MainWindow) StartupPage() controller.Route { switch m.App.Config.Application.StartupPage { case "Favorites":