From 79b600b28b1337d4e6fdc3a50039da959387c51f Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Mon, 8 Mar 2021 12:54:28 +0000 Subject: [PATCH] When window init fails we should quit the app Fixes #1593 --- internal/driver/glfw/driver.go | 11 +++++++++++ internal/driver/glfw/window.go | 7 ++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/internal/driver/glfw/driver.go b/internal/driver/glfw/driver.go index 4964b5c022..7eef21173b 100644 --- a/internal/driver/glfw/driver.go +++ b/internal/driver/glfw/driver.go @@ -3,6 +3,7 @@ package glfw import ( + "os" "runtime" "strconv" "strings" @@ -113,6 +114,16 @@ func (d *gLDriver) windowList() []fyne.Window { return d.windows } +func (d *gLDriver) initFailed(msg string, err error) { + fyne.LogError(msg, err) + + if running() { + d.Quit() + } else { + os.Exit(1) + } +} + func goroutineID() int { b := make([]byte, 64) b = b[:runtime.Stack(b, false)] diff --git a/internal/driver/glfw/window.go b/internal/driver/glfw/window.go index 01e0ac4cca..ae5f84fe64 100644 --- a/internal/driver/glfw/window.go +++ b/internal/driver/glfw/window.go @@ -57,6 +57,7 @@ type window struct { cursor desktop.Cursor customCursor *glfw.Cursor canvas *glCanvas + driver *gLDriver title string icon fyne.Resource mainmenu *fyne.MainMenu @@ -446,7 +447,7 @@ func (w *window) Close() { func (w *window) ShowAndRun() { w.Show() - fyne.CurrentApp().Driver().Run() + w.driver.Run() } // Clipboard returns the system clipboard @@ -1265,7 +1266,7 @@ func (d *gLDriver) createWindow(title string, decorate bool) fyne.Window { runOnMain(func() { d.initGLFW() - ret = &window{title: title, decorate: decorate} + ret = &window{title: title, decorate: decorate, driver: d} // This channel will be closed when the window is closed. ret.eventQueue = make(chan func(), 1024) go ret.runEventQueue() @@ -1308,7 +1309,7 @@ func (w *window) create() { win, err := glfw.CreateWindow(pixWidth, pixHeight, w.title, nil, nil) if err != nil { - fyne.LogError("window creation error", err) + w.driver.initFailed("window creation error", err) return }