Skip to content

Changes events

Events#

In v3, there are 3 types of events:

  • Application Events
  • Window Events
  • Custom Events

Application Events#

Application events are events that are emitted by the application. These events include native events such as ApplicationDidFinishLaunching on macOS.

Window Events#

Window events are events that are emitted by a window. These events include native events such as WindowDidBecomeMain on macOS. Common events are also defined, so they work cross-platform, e.g. WindowClosing.

Custom Events#

Events that the user defines are called WailsEvents. This is to differentiate them from the Event object that is used to communicate with the browser. WailsEvents are now objects that encapsulate all the details of an event. This includes the event name, the data, and the source of the event.

The data associated with a WailsEvent is now a single value. If multiple values are required, then a struct can be used.

Event callbacks and Emit function signature#

The signatures events callbacks (as used by On, Once & OnMultiple) have changed. In v2, the callback function received optional data. In v3, the callback function receives a WailsEvent object that contains all data related to the event.

Similarly, the Emit function has changed. Instead of taking a name and optional data, it now takes a single WailsEvent object that it will emit.

Off and OffAll#

In v2, Off and OffAll calls would remove events in both JS and Go. Due to the multi-window nature of v3, this has been changed so that these methods only apply to the context they are called in. For example, if you call Off in a window, it will only remove events for that window. If you use Off in Go, it will only remove events for Go.

Hooks#

Event Hooks are a new feature in v3. They allow you to hook into the event system and perform actions when certain events are emitted. For example, you can hook into the WindowClosing event and perform some cleanup before the window closes. Hooks can be registered at the application level or at the window level using RegisterHook. Application level are for application events. Window level hooks will only be called for the window they are registered with.

Developer notes#

When emitting an event in Go, it will dispatch the event to local Go listeners and also each window in the application. When emitting an event in JS, it now sends the event to the application. This will be processed as if it was emitted in Go, however the sender ID will be that of the window.