From b2c030140c43edf833fe2367e37a5d9ceb1bf202 Mon Sep 17 00:00:00 2001 From: egrs Date: Wed, 18 Feb 2026 15:08:40 +0100 Subject: [PATCH] click on focusable elements calls focus() with events MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit handleClick() was setting _active_element directly, bypassing Element.focus() — so no blur/focus events fired on click. Now calls focus() for input, button, select, textarea, anchor. --- src/browser/Page.zig | 12 +++++--- src/browser/tests/document/focus.html | 43 +++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/src/browser/Page.zig b/src/browser/Page.zig index 40b73618..a1433fbb 100644 --- a/src/browser/Page.zig +++ b/src/browser/Page.zig @@ -3045,21 +3045,25 @@ pub fn handleClick(self: *Page, target: *Node) !void { return; } + try element.focus(self); try self.scheduleNavigation(href, .{ .reason = .script, .kind = .{ .push = null }, }, .anchor); }, - .input => |input| switch (input._input_type) { - .submit => return self.submitForm(element, input.getForm(self), .{}), - else => self.window._document._active_element = element, + .input => |input| { + try element.focus(self); + if (input._input_type == .submit) { + return self.submitForm(element, input.getForm(self), .{}); + } }, .button => |button| { + try element.focus(self); if (std.mem.eql(u8, button.getType(), "submit")) { return self.submitForm(element, button.getForm(self), .{}); } }, - .select, .textarea => self.window._document._active_element = element, + .select, .textarea => try element.focus(self), else => {}, } } diff --git a/src/browser/tests/document/focus.html b/src/browser/tests/document/focus.html index 3e72e1d4..e3bfba88 100644 --- a/src/browser/tests/document/focus.html +++ b/src/browser/tests/document/focus.html @@ -88,3 +88,46 @@ testing.expectEqual(focused, document.activeElement); } + + + +