From 103c6f46249b306b23affe590dc65eb3e8f942bb Mon Sep 17 00:00:00 2001 From: Lotus CI Date: Thu, 24 Sep 2026 13:16:12 -0400 Subject: [PATCH] fix(a11y): closing a header/sidebar menu returns focus to its button MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 16 menus (room header, Home/Direct/Space sidebar tabs, create tab, lobby, room-nav item, history visibility, client root) set returnFocusOnDeactivate: false, so pressing Escape dropped focus to and a keyboard user had to start over from the top of the page. That option was there so focus wouldn't be pulled back to the menu button when an item opens a dialog; since ce8ed89f dialogs move focus into themselves (their initial focus runs after the menu's return), so it's no longer needed. The autocomplete menu (focus must stay in the editor) and the two menus whose opener disappears are left as they were. Checked: room header menu → Escape → focus on "More options" (was ); menu → Leave Room → focus inside the Leave Room dialog on Cancel, same as before. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA --- .../features/common-settings/general/RoomHistoryVisibility.tsx | 1 - src/app/features/lobby/HierarchyItemMenu.tsx | 1 - src/app/features/lobby/LobbyHeader.tsx | 1 - src/app/features/room-nav/RoomNavItem.tsx | 1 - src/app/features/room/RoomViewHeader.tsx | 3 --- src/app/pages/client/ClientRoot.tsx | 1 - src/app/pages/client/direct/Direct.tsx | 1 - src/app/pages/client/home/Home.tsx | 2 -- src/app/pages/client/sidebar/CreateTab.tsx | 1 - src/app/pages/client/sidebar/DirectTab.tsx | 1 - src/app/pages/client/sidebar/HomeTab.tsx | 1 - src/app/pages/client/sidebar/SpaceTabs.tsx | 1 - src/app/pages/client/space/Space.tsx | 1 - 13 files changed, 16 deletions(-) diff --git a/src/app/features/common-settings/general/RoomHistoryVisibility.tsx b/src/app/features/common-settings/general/RoomHistoryVisibility.tsx index 198ed2dcf..c5fdaca7b 100644 --- a/src/app/features/common-settings/general/RoomHistoryVisibility.tsx +++ b/src/app/features/common-settings/general/RoomHistoryVisibility.tsx @@ -108,7 +108,6 @@ export function RoomHistoryVisibility({ permissions }: RoomHistoryVisibilityProp setMenuAnchor(undefined), clickOutsideDeactivates: true, isKeyForward: (evt: KeyboardEvent) => evt.key === 'ArrowDown', diff --git a/src/app/features/lobby/HierarchyItemMenu.tsx b/src/app/features/lobby/HierarchyItemMenu.tsx index fa921c33d..f58dd69e4 100644 --- a/src/app/features/lobby/HierarchyItemMenu.tsx +++ b/src/app/features/lobby/HierarchyItemMenu.tsx @@ -256,7 +256,6 @@ export function HierarchyItemMenu({ setMenuAnchor(undefined), clickOutsideDeactivates: true, isKeyForward: (evt: KeyboardEvent) => evt.key === 'ArrowDown', diff --git a/src/app/features/lobby/LobbyHeader.tsx b/src/app/features/lobby/LobbyHeader.tsx index 5a1a44c72..7a3cbf2a3 100644 --- a/src/app/features/lobby/LobbyHeader.tsx +++ b/src/app/features/lobby/LobbyHeader.tsx @@ -260,7 +260,6 @@ export function LobbyHeader({ showProfile, powerLevels }: LobbyHeaderProps) { setMenuAnchor(undefined), clickOutsideDeactivates: true, isKeyForward: (evt: KeyboardEvent) => evt.key === 'ArrowDown', diff --git a/src/app/features/room-nav/RoomNavItem.tsx b/src/app/features/room-nav/RoomNavItem.tsx index 63834f7ec..711dd0122 100644 --- a/src/app/features/room-nav/RoomNavItem.tsx +++ b/src/app/features/room-nav/RoomNavItem.tsx @@ -1028,7 +1028,6 @@ function RoomNavItem_({ setMenuAnchor(undefined), clickOutsideDeactivates: true, isKeyForward: (evt: KeyboardEvent) => evt.key === 'ArrowDown', diff --git a/src/app/features/room/RoomViewHeader.tsx b/src/app/features/room/RoomViewHeader.tsx index 41be23fa9..38a75ff05 100644 --- a/src/app/features/room/RoomViewHeader.tsx +++ b/src/app/features/room/RoomViewHeader.tsx @@ -519,7 +519,6 @@ function CallButton() { setMenuAnchor(undefined), clickOutsideDeactivates: true, isKeyForward: (evt: KeyboardEvent) => evt.key === 'ArrowDown', @@ -769,7 +768,6 @@ export function RoomViewHeader({ callView }: { callView?: boolean }) { setPinMenuAnchor(undefined), clickOutsideDeactivates: true, isKeyForward: (evt: KeyboardEvent) => evt.key === 'ArrowDown', @@ -940,7 +938,6 @@ export function RoomViewHeader({ callView }: { callView?: boolean }) { setMenuAnchor(undefined), clickOutsideDeactivates: true, isKeyForward: (evt: KeyboardEvent) => evt.key === 'ArrowDown', diff --git a/src/app/pages/client/ClientRoot.tsx b/src/app/pages/client/ClientRoot.tsx index aaa19903f..d74a83b94 100644 --- a/src/app/pages/client/ClientRoot.tsx +++ b/src/app/pages/client/ClientRoot.tsx @@ -101,7 +101,6 @@ function ClientRootOptions({ mx }: { mx?: MatrixClient }) { setMenuAnchor(undefined), clickOutsideDeactivates: true, isKeyForward: (evt: KeyboardEvent) => evt.key === 'ArrowDown', diff --git a/src/app/pages/client/direct/Direct.tsx b/src/app/pages/client/direct/Direct.tsx index 8a4dbd318..d017125ca 100644 --- a/src/app/pages/client/direct/Direct.tsx +++ b/src/app/pages/client/direct/Direct.tsx @@ -130,7 +130,6 @@ function DirectHeader() { setMenuAnchor(undefined), clickOutsideDeactivates: true, isKeyForward: (evt: KeyboardEvent) => evt.key === 'ArrowDown', diff --git a/src/app/pages/client/home/Home.tsx b/src/app/pages/client/home/Home.tsx index ec683f80e..4a3a0e0df 100644 --- a/src/app/pages/client/home/Home.tsx +++ b/src/app/pages/client/home/Home.tsx @@ -159,7 +159,6 @@ function HomeHeader() { setMenuAnchor(undefined), clickOutsideDeactivates: true, isKeyForward: (evt: KeyboardEvent) => evt.key === 'ArrowDown', @@ -665,7 +664,6 @@ export function Home() { setSortMenuAnchor(undefined), clickOutsideDeactivates: true, isKeyForward: (evt: KeyboardEvent) => evt.key === 'ArrowDown', diff --git a/src/app/pages/client/sidebar/CreateTab.tsx b/src/app/pages/client/sidebar/CreateTab.tsx index 57e660903..8c9a71b62 100644 --- a/src/app/pages/client/sidebar/CreateTab.tsx +++ b/src/app/pages/client/sidebar/CreateTab.tsx @@ -49,7 +49,6 @@ export function CreateTab() { content={ setMenuCords(undefined), clickOutsideDeactivates: true, diff --git a/src/app/pages/client/sidebar/DirectTab.tsx b/src/app/pages/client/sidebar/DirectTab.tsx index b2c750539..70e07e941 100644 --- a/src/app/pages/client/sidebar/DirectTab.tsx +++ b/src/app/pages/client/sidebar/DirectTab.tsx @@ -121,7 +121,6 @@ export function DirectTab() { setMenuAnchor(undefined), clickOutsideDeactivates: true, isKeyForward: (evt: KeyboardEvent) => evt.key === 'ArrowDown', diff --git a/src/app/pages/client/sidebar/HomeTab.tsx b/src/app/pages/client/sidebar/HomeTab.tsx index cc12ac9e0..58941733c 100644 --- a/src/app/pages/client/sidebar/HomeTab.tsx +++ b/src/app/pages/client/sidebar/HomeTab.tsx @@ -123,7 +123,6 @@ export function HomeTab() { setMenuAnchor(undefined), clickOutsideDeactivates: true, isKeyForward: (evt: KeyboardEvent) => evt.key === 'ArrowDown', diff --git a/src/app/pages/client/sidebar/SpaceTabs.tsx b/src/app/pages/client/sidebar/SpaceTabs.tsx index 584290c94..601caa3d2 100644 --- a/src/app/pages/client/sidebar/SpaceTabs.tsx +++ b/src/app/pages/client/sidebar/SpaceTabs.tsx @@ -525,7 +525,6 @@ function SpaceTab({ setMenuAnchor(undefined), clickOutsideDeactivates: true, isKeyForward: (evt: KeyboardEvent) => evt.key === 'ArrowDown', diff --git a/src/app/pages/client/space/Space.tsx b/src/app/pages/client/space/Space.tsx index a2657c245..336c55eec 100644 --- a/src/app/pages/client/space/Space.tsx +++ b/src/app/pages/client/space/Space.tsx @@ -324,7 +324,6 @@ function SpaceHeader() { setMenuAnchor(undefined), clickOutsideDeactivates: true, isKeyForward: (evt: KeyboardEvent) => evt.key === 'ArrowDown',