don't use app.Emit(), instead dispatch to individual windows for synchronous event dispatch

This commit is contained in:
sawka 2024-05-16 12:39:14 -07:00
parent eab6afb91a
commit 8573a415c0

View File

@ -63,6 +63,18 @@ func emitEventToWindow(event WindowEvent) {
}
}
func emitEventToAllWindows(event *application.WailsEvent) {
globalLock.Lock()
wins := make([]*application.WebviewWindow, 0, len(wailsWindowMap))
for _, window := range wailsWindowMap {
wins = append(wins, window)
}
globalLock.Unlock()
for _, window := range wins {
window.DispatchWailsEvent(event)
}
}
func SendEvent(event application.WailsEvent) {
EventCh <- event
}
@ -107,10 +119,7 @@ func processEvents() {
for {
select {
case event := <-EventCh:
// no lock needed for wailsApp since it is never updated
if wailsApp != nil {
wailsApp.Events.Emit(&event)
}
emitEventToAllWindows(&event)
case windowEvent := <-WindowEventCh:
emitEventToWindow(windowEvent)