[Pale-Moon] Issue #1936 - Optionally leave Bookmarks menu open when spawning new tab.

This resolves #1936
This commit is contained in:
Moonchild 2023-09-12 00:33:02 +02:00 committed by roytam1
commit 56f5e8f283
5 changed files with 57 additions and 14 deletions

View file

@ -494,6 +494,9 @@ pref("browser.bookmarks.autoExportHTML", false);
// 0: no backups created (and deletes all existing backups)
pref("browser.bookmarks.max_backups", 10);
// Whether menu should close after Ctrl-click, middle-click, etc.
pref("browser.bookmarks.openInTabClosesMenu", true);
// Scripts & Windows prefs
pref("dom.disable_open_during_load", true);
pref("javascript.options.showInConsole", true);

View file

@ -371,6 +371,7 @@
placespopup="true"
context="placesContext"
openInTabs="children"
onmouseup="BookmarksEventHandler.onMouseUp(event);"
oncommand="BookmarksEventHandler.onCommand(event, this.parentNode._placesView);"
onclick="BookmarksEventHandler.onClick(event, this.parentNode._placesView);"
onpopupshowing="PlacesCommandHook.updateBookmarkAllTabsCommand();

View file

@ -767,17 +767,46 @@ HistoryMenu.prototype = {
* Functions for handling events in the Bookmarks Toolbar and menu.
*/
var BookmarksEventHandler = {
/**
* Handler for mouseUp event for an item in the bookmarks toolbar or menu.
* When items are middle-clicked (or clicked with modifier), check if the
* menu should remain open.
* @param aEvent
* DOMEvent for the click
*/
onMouseUp(aEvent) {
// Handles left-click with modifier if not browser.bookmarks.openInTabClosesMenu.
if (aEvent.button != 0 ||
Services.prefs.getBoolPref("browser.bookmarks.openInTabClosesMenu", true))
return;
let target = aEvent.originalTarget;
if (target.tagName != "menuitem")
return;
#ifdef XP_MACOSX
var modifKey = aEvent.metaKey;
#else
var modifKey = aEvent.ctrlKey;
#endif
// Don't keep menu open for 'Open all in Tabs'.
if (modifKey && !target.classList.contains("openintabs-menuitem")) {
target.setAttribute("closemenu", "none");
}
},
/**
* Handler for click event for an item in the bookmarks toolbar or menu.
* Menus and submenus from the folder buttons bubble up to this handler.
* Left-click is handled in the onCommand function.
* When items are middle-clicked (or clicked with modifier), open in tabs.
* If the click came through a menu, close the menu.
* If the click came through a menu, close the menu unless preffed otherwise.
* @param aEvent
* DOMEvent for the click
* @param aView
* The places view which aEvent should be associated with.
*/
onClick: function(aEvent, aView) {
// Only handle middle-click or left-click with modifiers.
var modifKey = aEvent.ctrlKey || aEvent.shiftKey;
@ -786,19 +815,23 @@ var BookmarksEventHandler = {
}
var target = aEvent.originalTarget;
// If this event bubbled up from a menu or menuitem, close the menus.
// Do this before opening tabs, to avoid hiding the open tabs confirm-dialog.
if (target.localName == "menu" || target.localName == "menuitem") {
for (node = target.parentNode; node; node = node.parentNode) {
if (node.localName == "menupopup") {
node.hidePopup();
} else if (node.localName != "menu" &&
node.localName != "splitmenu" &&
node.localName != "hbox" &&
node.localName != "vbox" ) {
break;
}
}
// If this event bubbled up from a menu or menuitem,
// close the menus if browser.bookmarks.openInTabClosesMenu.
if ((Services.prefs.getBoolPref("browser.bookmarks.openInTabClosesMenu", true) &&
target.tagName == "menuitem") ||
target.tagName == "menu" ||
target.classList.contains("openintabs-menuitem")) {
closeMenus(aEvent.target);
}
// Command already precesssed so remove any closemenu attr set in onMouseUp.
if (aEvent.button == 0 &&
target.tagName == "menuitem" &&
target.getAttribute("closemenu") == "none") {
// On Mac we need to extend when we remove the flag, to avoid any pre-close
// animations.
setTimeout(() => {
target.removeAttribute("closemenu");
}, 500);
}
if (target._placesNode && PlacesUtils.nodeIsContainer(target._placesNode)) {

View file

@ -548,6 +548,7 @@
placespopup="true"
context="placesContext"
openInTabs="children"
onmouseup="BookmarksEventHandler.onMouseUp(event);"
oncommand="BookmarksEventHandler.onCommand(event, this.parentNode._placesView);"
onclick="event.stopPropagation();
BookmarksEventHandler.onClick(event, this.parentNode._placesView);"
@ -704,6 +705,7 @@
<hbox flex="1"
id="PlacesToolbar"
context="placesContext"
onmouseup="BookmarksEventHandler.onMouseUp(event);"
onclick="BookmarksEventHandler.onClick(event, this._placesView);"
oncommand="BookmarksEventHandler.onCommand(event, this._placesView);"
tooltip="bhTooltip"

View file

@ -100,6 +100,10 @@
<menupopup id="placesContext"
onpopupshowing="this._view = PlacesUIUtils.getViewForNode(document.popupNode);
if (!PlacesUIUtils.openInTabClosesMenu) {
document.getElementById ('placesContext_open:newtab')
.setAttribute('closemenu', 'single');
}
return this._view.buildContextMenu(this);"
onpopuphiding="this._view.destroyContextMenu();">
<menuitem id="placesContext_open"