diff --git a/app/internal/window/os_unix.go b/app/internal/window/os_unix.go index d32a03fb..76d6ce17 100644 --- a/app/internal/window/os_unix.go +++ b/app/internal/window/os_unix.go @@ -8,10 +8,16 @@ import ( "errors" ) -var mainDone = make(chan struct{}) +// windowCounter keeps track of the number of windows. +// A send of +1 or -1 represents a change in window count. +var windowCounter = make(chan int) func Main() { - <-mainDone + // Wait for first window + count := <-windowCounter + for count > 0 { + count += <-windowCounter + } } // instead of creating files with build tags for each combination of wayland +/- x11 diff --git a/app/internal/window/os_wayland.go b/app/internal/window/os_wayland.go index 7adbc04d..4c854c1d 100644 --- a/app/internal/window/os_wayland.go +++ b/app/internal/window/os_wayland.go @@ -179,13 +179,18 @@ func newWLWindow(window Callbacks, opts *Options) error { d.destroy() return err } + // Increment window counter. + windowCounter <- +1 w.w = window go func() { + defer func() { + // Decrement window counter. + windowCounter <- -1 + }() w.w.SetDriver(w) w.loop() w.destroy() d.destroy() - close(mainDone) }() return nil } diff --git a/app/internal/window/os_x11.go b/app/internal/window/os_x11.go index 7189d042..d5674598 100644 --- a/app/internal/window/os_x11.go +++ b/app/internal/window/os_x11.go @@ -422,12 +422,16 @@ func newX11Window(gioWin Callbacks, opts *Options) error { // make the window visible on the screen C.XMapWindow(dpy, win) + // Increment window counter. + windowCounter <- +1 go func() { + defer func() { + windowCounter <- -1 + }() w.w.SetDriver(w) w.setStage(system.StageRunning) w.loop() w.destroy() - close(mainDone) }() return nil }