@@ -111,27 +111,30 @@ pub const Window = struct {
111111 /// Sets `onload_callback`.
112112 pub fn set_onload (self : * Window , maybe_listener : ? EventHandler.Listener , page : * Page ) ! void {
113113 const event_target = parser .toEventTarget (Window , self );
114+ const event_type = "load" ;
114115
116+ // Check if we have a listener set.
115117 if (self .onload_callback ) | callback | {
116- // If we got here, it means `onload_callback` has been set before
117- // so listener cannot be null.
118- const listener = try parser .eventTargetHasListener (event_target , "load" , false , callback .id );
118+ const listener = try parser .eventTargetHasListener (event_target , event_type , false , callback .id );
119119 std .debug .assert (listener != null );
120-
121- try parser .eventTargetRemoveEventListener (event_target , "load" , listener .? , false );
120+ try parser .eventTargetRemoveEventListener (event_target , event_type , listener .? , false );
122121 }
123122
124123 if (maybe_listener ) | listener | {
125- // The only time this can return null if the listener is already
126- // registered. But before calling `register`, all of our functions
127- // remove any existing listener, so it should be impossible to get null
128- // from this function call.
129- _ = try EventHandler .register (page .arena , event_target , "load" , listener , null ) orelse unreachable ;
130- self .onload_callback = listener .function ;
131- } else {
132- // Just unset the listener.
133- self .onload_callback = null ;
124+ switch (listener ) {
125+ // If an object is given as listener, do nothing.
126+ .object = > {},
127+ .function = > | callback | {
128+ _ = try EventHandler .register (page .arena , event_target , event_type , listener , null ) orelse unreachable ;
129+ self .onload_callback = callback ;
130+
131+ return ;
132+ },
133+ }
134134 }
135+
136+ // Just unset the listener.
137+ self .onload_callback = null ;
135138 }
136139
137140 pub fn get_window (self : * Window ) * Window {
0 commit comments