diff --git a/v3/examples/events/main.go b/v3/examples/events/main.go index 8e19a097..a92fc0b5 100644 --- a/v3/examples/events/main.go +++ b/v3/examples/events/main.go @@ -43,7 +43,7 @@ func main() { } }) - app.On(events.Windows.SystemThemeChanged, func(event *application.Event) { + app.On(events.Common.ThemeChanged, func(event *application.Event) { log.Println("System theme changed!") if event.Context().IsDarkMode() { log.Println("System is now using dark mode!") diff --git a/v3/pkg/application/application_darwin.go b/v3/pkg/application/application_darwin.go index 7fa631b2..8b42004e 100644 --- a/v3/pkg/application/application_darwin.go +++ b/v3/pkg/application/application_darwin.go @@ -237,8 +237,14 @@ func newPlatformApp(app *App) *macosApp { } //export processApplicationEvent -func processApplicationEvent(eventID C.uint) { - applicationEvents <- NewApplicationEvent(uint(eventID)) +func processApplicationEvent(eventID C.uint, _ unsafe.Pointer) { + event := NewApplicationEvent(int(eventID)) + switch event.Id { + case uint(events.Mac.ApplicationDidChangeTheme): + isDark := globalApplication.IsDarkMode() + event.Context().setIsDarkMode(isDark) + } + applicationEvents <- event } //export processWindowEvent @@ -285,13 +291,6 @@ func processMenuItemClick(menuID C.uint) { menuItemClicked <- uint(menuID) } -func setIcon(icon []byte) { - if icon == nil { - return - } - C.setApplicationIcon(unsafe.Pointer(&icon[0]), C.int(len(icon))) -} - func (a *App) logPlatformInfo() { info, err := operatingsystem.Info() if err != nil { diff --git a/v3/pkg/application/application_darwin_delegate.m b/v3/pkg/application/application_darwin_delegate.m index 1124c362..855b0309 100644 --- a/v3/pkg/application/application_darwin_delegate.m +++ b/v3/pkg/application/application_darwin_delegate.m @@ -14,127 +14,127 @@ extern bool hasListeners(unsigned int); } - (void)themeChanged:(NSNotification *)notification { if( hasListeners(EventApplicationDidChangeTheme) ) { - processApplicationEvent(EventApplicationDidChangeTheme); + processApplicationEvent(EventApplicationDidChangeTheme, NULL); } } // GENERATED EVENTS START - (void)applicationDidBecomeActive:(NSNotification *)notification { if( hasListeners(EventApplicationDidBecomeActive) ) { - processApplicationEvent(EventApplicationDidBecomeActive); + processApplicationEvent(EventApplicationDidBecomeActive, NULL); } } - (void)applicationDidChangeBackingProperties:(NSNotification *)notification { if( hasListeners(EventApplicationDidChangeBackingProperties) ) { - processApplicationEvent(EventApplicationDidChangeBackingProperties); + processApplicationEvent(EventApplicationDidChangeBackingProperties, NULL); } } - (void)applicationDidChangeEffectiveAppearance:(NSNotification *)notification { if( hasListeners(EventApplicationDidChangeEffectiveAppearance) ) { - processApplicationEvent(EventApplicationDidChangeEffectiveAppearance); + processApplicationEvent(EventApplicationDidChangeEffectiveAppearance, NULL); } } - (void)applicationDidChangeIcon:(NSNotification *)notification { if( hasListeners(EventApplicationDidChangeIcon) ) { - processApplicationEvent(EventApplicationDidChangeIcon); + processApplicationEvent(EventApplicationDidChangeIcon, NULL); } } - (void)applicationDidChangeOcclusionState:(NSNotification *)notification { if( hasListeners(EventApplicationDidChangeOcclusionState) ) { - processApplicationEvent(EventApplicationDidChangeOcclusionState); + processApplicationEvent(EventApplicationDidChangeOcclusionState, NULL); } } - (void)applicationDidChangeScreenParameters:(NSNotification *)notification { if( hasListeners(EventApplicationDidChangeScreenParameters) ) { - processApplicationEvent(EventApplicationDidChangeScreenParameters); + processApplicationEvent(EventApplicationDidChangeScreenParameters, NULL); } } - (void)applicationDidChangeStatusBarFrame:(NSNotification *)notification { if( hasListeners(EventApplicationDidChangeStatusBarFrame) ) { - processApplicationEvent(EventApplicationDidChangeStatusBarFrame); + processApplicationEvent(EventApplicationDidChangeStatusBarFrame, NULL); } } - (void)applicationDidChangeStatusBarOrientation:(NSNotification *)notification { if( hasListeners(EventApplicationDidChangeStatusBarOrientation) ) { - processApplicationEvent(EventApplicationDidChangeStatusBarOrientation); + processApplicationEvent(EventApplicationDidChangeStatusBarOrientation, NULL); } } - (void)applicationDidFinishLaunching:(NSNotification *)notification { if( hasListeners(EventApplicationDidFinishLaunching) ) { - processApplicationEvent(EventApplicationDidFinishLaunching); + processApplicationEvent(EventApplicationDidFinishLaunching, NULL); } } - (void)applicationDidHide:(NSNotification *)notification { if( hasListeners(EventApplicationDidHide) ) { - processApplicationEvent(EventApplicationDidHide); + processApplicationEvent(EventApplicationDidHide, NULL); } } - (void)applicationDidResignActiveNotification:(NSNotification *)notification { if( hasListeners(EventApplicationDidResignActiveNotification) ) { - processApplicationEvent(EventApplicationDidResignActiveNotification); + processApplicationEvent(EventApplicationDidResignActiveNotification, NULL); } } - (void)applicationDidUnhide:(NSNotification *)notification { if( hasListeners(EventApplicationDidUnhide) ) { - processApplicationEvent(EventApplicationDidUnhide); + processApplicationEvent(EventApplicationDidUnhide, NULL); } } - (void)applicationDidUpdate:(NSNotification *)notification { if( hasListeners(EventApplicationDidUpdate) ) { - processApplicationEvent(EventApplicationDidUpdate); + processApplicationEvent(EventApplicationDidUpdate, NULL); } } - (void)applicationWillBecomeActive:(NSNotification *)notification { if( hasListeners(EventApplicationWillBecomeActive) ) { - processApplicationEvent(EventApplicationWillBecomeActive); + processApplicationEvent(EventApplicationWillBecomeActive, NULL); } } - (void)applicationWillFinishLaunching:(NSNotification *)notification { if( hasListeners(EventApplicationWillFinishLaunching) ) { - processApplicationEvent(EventApplicationWillFinishLaunching); + processApplicationEvent(EventApplicationWillFinishLaunching, NULL); } } - (void)applicationWillHide:(NSNotification *)notification { if( hasListeners(EventApplicationWillHide) ) { - processApplicationEvent(EventApplicationWillHide); + processApplicationEvent(EventApplicationWillHide, NULL); } } - (void)applicationWillResignActive:(NSNotification *)notification { if( hasListeners(EventApplicationWillResignActive) ) { - processApplicationEvent(EventApplicationWillResignActive); + processApplicationEvent(EventApplicationWillResignActive, NULL); } } - (void)applicationWillTerminate:(NSNotification *)notification { if( hasListeners(EventApplicationWillTerminate) ) { - processApplicationEvent(EventApplicationWillTerminate); + processApplicationEvent(EventApplicationWillTerminate, NULL); } } - (void)applicationWillUnhide:(NSNotification *)notification { if( hasListeners(EventApplicationWillUnhide) ) { - processApplicationEvent(EventApplicationWillUnhide); + processApplicationEvent(EventApplicationWillUnhide, NULL); } } - (void)applicationWillUpdate:(NSNotification *)notification { if( hasListeners(EventApplicationWillUpdate) ) { - processApplicationEvent(EventApplicationWillUpdate); + processApplicationEvent(EventApplicationWillUpdate, NULL); } } diff --git a/v3/pkg/application/events.go b/v3/pkg/application/events.go index 280c128d..dbf6bc9f 100644 --- a/v3/pkg/application/events.go +++ b/v3/pkg/application/events.go @@ -19,7 +19,8 @@ func (w *Event) Context() *ApplicationEventContext { func NewApplicationEvent(id int) *Event { return &Event{ - Id: uint(id), + Id: uint(id), + ctx: newApplicationEventContext(), } } @@ -49,8 +50,6 @@ func (e *WailsEvent) Cancel() { e.Cancelled = true } -var commonEvents = make(chan *Event) - func (e WailsEvent) ToJSON() string { marshal, err := json.Marshal(&e) if err != nil { diff --git a/v3/pkg/application/events_common_darwin.go b/v3/pkg/application/events_common_darwin.go index f149e9aa..1f4bac51 100644 --- a/v3/pkg/application/events_common_darwin.go +++ b/v3/pkg/application/events_common_darwin.go @@ -11,6 +11,8 @@ var commonApplicationEventMap = map[events.ApplicationEventType]events.Applicati func (m *macosApp) setupCommonEvents() { for sourceEvent, targetEvent := range commonApplicationEventMap { + sourceEvent := sourceEvent + targetEvent := targetEvent m.parent.On(sourceEvent, func(event *Event) { event.Id = uint(targetEvent) applicationEvents <- event diff --git a/v3/pkg/application/events_common_windows.go b/v3/pkg/application/events_common_windows.go index 9ea29217..de0dbd16 100644 --- a/v3/pkg/application/events_common_windows.go +++ b/v3/pkg/application/events_common_windows.go @@ -10,6 +10,8 @@ var commonApplicationEventMap = map[events.ApplicationEventType]events.Applicati func (m *windowsApp) setupCommonEvents() { for sourceEvent, targetEvent := range commonApplicationEventMap { + sourceEvent := sourceEvent + targetEvent := targetEvent m.parent.On(sourceEvent, func(event *Event) { event.Id = uint(targetEvent) applicationEvents <- event diff --git a/v3/pkg/events/events.h b/v3/pkg/events/events.h index 03b3eca7..60f25f5a 100644 --- a/v3/pkg/events/events.h +++ b/v3/pkg/events/events.h @@ -3,7 +3,7 @@ #ifndef _events_h #define _events_h -extern void processApplicationEvent(unsigned int); +extern void processApplicationEvent(unsigned int, void* data); extern void processWindowEvent(unsigned int, unsigned int); #define EventApplicationDidBecomeActive 1024 diff --git a/v3/tasks/events/generate.go b/v3/tasks/events/generate.go index 87c8ad42..970f8b3a 100644 --- a/v3/tasks/events/generate.go +++ b/v3/tasks/events/generate.go @@ -60,7 +60,7 @@ var eventsH = `//go:build darwin #ifndef _events_h #define _events_h -extern void processApplicationEvent(unsigned int); +extern void processApplicationEvent(unsigned int, void* data); extern void processWindowEvent(unsigned int, unsigned int); $$CHEADEREVENTS @@ -177,7 +177,7 @@ func main() { if strings.HasPrefix(event, "Application") { applicationDelegateEvents.WriteString(`- (void)` + delegateEventFunction + `:(NSNotification *)notification { if( hasListeners(Event` + eventTitle + `) ) { - processApplicationEvent(Event` + eventTitle + `); + processApplicationEvent(Event` + eventTitle + `, NULL); } }