mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-29 15:13:28 +00:00
add window.onload getter and setter
This commit is contained in:
@@ -35,6 +35,7 @@ const CSSStyleDeclaration = @import("../cssom/CSSStyleDeclaration.zig");
|
|||||||
const Screen = @import("screen.zig").Screen;
|
const Screen = @import("screen.zig").Screen;
|
||||||
const domcss = @import("../dom/css.zig");
|
const domcss = @import("../dom/css.zig");
|
||||||
const Css = @import("../css/css.zig").Css;
|
const Css = @import("../css/css.zig").Css;
|
||||||
|
const EventHandler = @import("../events/event.zig").EventHandler;
|
||||||
|
|
||||||
const Function = Env.Function;
|
const Function = Env.Function;
|
||||||
|
|
||||||
@@ -67,6 +68,7 @@ pub const Window = struct {
|
|||||||
performance: Performance,
|
performance: Performance,
|
||||||
screen: Screen = .{},
|
screen: Screen = .{},
|
||||||
css: Css = .{},
|
css: Css = .{},
|
||||||
|
onload_callback: ?Function = null,
|
||||||
|
|
||||||
pub fn create(target: ?[]const u8, navigator: ?Navigator) !Window {
|
pub fn create(target: ?[]const u8, navigator: ?Navigator) !Window {
|
||||||
var fbs = std.io.fixedBufferStream("");
|
var fbs = std.io.fixedBufferStream("");
|
||||||
@@ -101,6 +103,37 @@ pub const Window = struct {
|
|||||||
return fetchFn(input, options, page);
|
return fetchFn(input, options, page);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns `onload_callback`.
|
||||||
|
pub fn get_onload(self: *const Window) ?Function {
|
||||||
|
return self.onload_callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Sets `onload_callback`.
|
||||||
|
pub fn set_onload(self: *Window, maybe_listener: ?EventHandler.Listener, page: *Page) !void {
|
||||||
|
const event_target = parser.toEventTarget(Window, self);
|
||||||
|
|
||||||
|
if (self.onload_callback) |callback| {
|
||||||
|
// If we got here, it means `onload_callback` has been set before
|
||||||
|
// so listener cannot be null.
|
||||||
|
const listener = try parser.eventTargetHasListener(event_target, "load", false, callback.id);
|
||||||
|
std.debug.assert(listener != null);
|
||||||
|
|
||||||
|
try parser.eventTargetRemoveEventListener(event_target, "load", listener.?, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (maybe_listener) |listener| {
|
||||||
|
// The only time this can return null if the listener is already
|
||||||
|
// registered. But before calling `register`, all of our functions
|
||||||
|
// remove any existing listener, so it should be impossible to get null
|
||||||
|
// from this function call.
|
||||||
|
_ = try EventHandler.register(page.arena, event_target, "load", listener, null) orelse unreachable;
|
||||||
|
self.onload_callback = listener.function;
|
||||||
|
} else {
|
||||||
|
// Just unset the listener.
|
||||||
|
self.onload_callback = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_window(self: *Window) *Window {
|
pub fn get_window(self: *Window) *Window {
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user