commit 40145a4ec11f6fa07d3560461e803980aff1b533
parent 59821e7b046fb18ebf0fcea877f07acc08547501
Author: Kyler Riggs <100742516+ky-ler@users.noreply.github.com>
Date: Thu, 23 Oct 2025 15:41:40 +0000
Bug 1995753 - Add "Turn on Vertical Tabs" option to the Menu Bar's context menu. r=nsharpley
Differential Revision: https://phabricator.services.mozilla.com/D267157
Diffstat:
2 files changed, 88 insertions(+), 2 deletions(-)
diff --git a/browser/components/customizableui/ToolbarContextMenu.sys.mjs b/browser/components/customizableui/ToolbarContextMenu.sys.mjs
@@ -235,6 +235,10 @@ export var ToolbarContextMenu = {
let isTitlebarSpacer = toolbarItem?.classList.contains("titlebar-spacer");
+ let isMenuBarSpacer =
+ toolbarItem?.localName == "spacer" &&
+ toolbarItem?.parentElement?.id == "toolbar-menubar";
+
// Show/hide fullscreen context menu items and set the
// autohide item's checked state to mirror the autohide pref.
showFullScreenViewContextMenuItems(popup);
@@ -244,7 +248,8 @@ export var ToolbarContextMenu = {
let showSidebarActions =
["tabbrowser-tabs", "sidebar-button"].includes(toolbarItem?.id) ||
toolbarItem?.localName == "toolbarspring" ||
- isTitlebarSpacer;
+ isTitlebarSpacer ||
+ isMenuBarSpacer;
let toggleVerticalTabsItem = document.getElementById(
"toolbar-context-toggle-vertical-tabs"
@@ -266,7 +271,7 @@ export var ToolbarContextMenu = {
!showSidebarActions || isVerticalTabStripMenu;
document.getElementById("customizationMenuSeparator").hidden =
toolbarItem?.id == "tabbrowser-tabs" ||
- (toolbarItem?.localName == "toolbarspring" &&
+ ((toolbarItem?.localName == "toolbarspring" || isMenuBarSpacer) &&
!CustomizationHandler.isCustomizing());
// View -> Toolbars menu doesn't have the moveToPanel or removeFromToolbar items.
diff --git a/browser/components/customizableui/test/browser_customization_context_menus.js b/browser/components/customizableui/test/browser_customization_context_menus.js
@@ -754,3 +754,84 @@ add_task(async function flexible_space_context_menu_customize_mode() {
ok(!lastSpring.parentNode, "Spring should have been removed successfully.");
await endCustomizing();
});
+
+// Menu Bar spacer context menu
+add_task(async function menubar_spacer_context_menu() {
+ if (isOSX) {
+ info("Skipping test that requires menu bar.");
+ return;
+ }
+
+ let menubar = document.getElementById("toolbar-menubar");
+ menubar.removeAttribute("autohide");
+ ok(!menubar.hasAttribute("autohide"), "Menu bar is visible");
+ let spacer = menubar.querySelector("spacer");
+ ok(spacer, "Found menubar spacer");
+ await waitForElementShown(spacer);
+ let contextMenu = document.getElementById("toolbar-context-menu");
+ let shownPromise = popupShown(contextMenu);
+ EventUtils.synthesizeMouseAtCenter(spacer, {
+ type: "contextmenu",
+ button: 2,
+ });
+ await shownPromise;
+
+ let expectedEntries = [
+ ["#toolbar-context-toggle-vertical-tabs", true],
+ ["---"],
+ ["#toggle_toolbar-menubar", true],
+ ["#toggle_PersonalToolbar", true],
+ ["---"],
+ [".viewCustomizeToolbar", true],
+ ];
+
+ checkContextMenu(contextMenu, expectedEntries);
+ let hiddenPromise = popupHidden(contextMenu);
+ contextMenu.hidePopup();
+ await hiddenPromise;
+ menubar.setAttribute("autohide", "true");
+ ok(menubar.hasAttribute("autohide"), "Menu bar is hidden");
+});
+
+// Menu Bar spacer context menu in customization mode
+add_task(async function menu_bar_spacer_context_menu_customize_mode() {
+ if (isOSX) {
+ info("Skipping test that requires menu bar.");
+ return;
+ }
+
+ await startCustomizing();
+ let menubar = document.getElementById("toolbar-menubar");
+ menubar.removeAttribute("autohide");
+ ok(!menubar.hasAttribute("autohide"), "Menu bar is visible");
+ let spacer = menubar.querySelector("spacer");
+ ok(spacer, "Found menubar spacer");
+ await waitForElementShown(spacer);
+ let contextMenu = document.getElementById("toolbar-context-menu");
+ let shownPromise = popupShown(contextMenu);
+ EventUtils.synthesizeMouseAtCenter(spacer, {
+ type: "contextmenu",
+ button: 2,
+ });
+ await shownPromise;
+
+ let expectedEntries = [
+ ["#toolbar-context-toggle-vertical-tabs", true],
+ ["---"],
+ [".customize-context-moveToPanel", false],
+ [".customize-context-removeFromToolbar", false],
+ ["---"],
+ ["#toggle_toolbar-menubar", true],
+ ["#toggle_PersonalToolbar", true],
+ ["---"],
+ [".viewCustomizeToolbar", false],
+ ];
+
+ checkContextMenu(contextMenu, expectedEntries);
+ let hiddenPromise = popupHidden(contextMenu);
+ contextMenu.hidePopup();
+ await hiddenPromise;
+ menubar.setAttribute("autohide", "true");
+ ok(menubar.hasAttribute("autohide"), "Menu bar is hidden");
+ await endCustomizing();
+});