diff --git a/addon/chrome/content/click/click.js b/addon/chrome/content/click/click.js
index be71c70e..a219d449 100644
--- a/addon/chrome/content/click/click.js
+++ b/addon/chrome/content/click/click.js
@@ -546,12 +546,6 @@ var TabmixContext = {
Tabmix.showItem("context_unpinTab", !multiselectionContext && show && aTab.pinned);
Tabmix.showItem("context_pinSelectedTabs", multiselectionContext && show && !aTab.pinned);
Tabmix.showItem("context_unpinSelectedTabs", multiselectionContext && show && aTab.pinned);
- setTimeout(() => {
- // we need to set our show/hide after tabGroups extension
- let tabViewMenu = document.getElementById("context_tabViewMenu") ||
- document.getElementById("tabGroups-context_tabViewMenu");
- Tabmix.showItem(tabViewMenu, Tabmix.prefs.getBoolPref("moveToGroup") && !aTab.pinned);
- });
Tabmix.showItem("context_moveTabOptions", Tabmix.prefs.getBoolPref("moveTabOptions"));
// make sure not to show menu items that are hidden by Firefox
@@ -1267,7 +1261,7 @@ var TabmixAllTabs = {
if (typeof window.colorfulTabs == "object") {
let rule = "none";
if (window.colorfulTabs.clrAllTabsPopPref) {
- let tabClr = TabmixSessionData.getTabValue(tab, "tabClr");
+ let tabClr = SessionStore.getCustomTabValue(tab, "tabClr");
if (tabClr)
rule = "linear-gradient(rgba(255,255,255,.7),rgba(#1,.5),rgb(#1)),linear-gradient(rgb(#1),rgb(#1))"
.replace(/#1/g, tabClr);
diff --git a/addon/chrome/content/click/listeners.js b/addon/chrome/content/click/listeners.js
index 3250554e..38e666f3 100644
--- a/addon/chrome/content/click/listeners.js
+++ b/addon/chrome/content/click/listeners.js
@@ -23,14 +23,6 @@
const mainCommandSet = document.getElementById("mainCommandSet");
mainCommandSet?.addEventListener("command", (/** @type {PopupEvent} */ event) => {
switch (event.target.id) {
- case "TabmixSessionUtils:SaveThisWindow":
- TabmixSessionManager.sessionUtil("save", "thiswindow");
- event.stopPropagation();
- break;
- case "TabmixSessionUtils:SaveAllWindow":
- TabmixSessionManager.sessionUtil("save", "allwindows");
- event.stopPropagation();
- break;
case "History:UndoCloseTab":
event.stopPropagation();
undoCloseTab();
diff --git a/addon/chrome/content/dialogs/promptservice.js b/addon/chrome/content/dialogs/promptservice.js
deleted file mode 100644
index 4fd57c60..00000000
--- a/addon/chrome/content/dialogs/promptservice.js
+++ /dev/null
@@ -1,285 +0,0 @@
-///
-
-/* exported TMP_BUTTON_OK, TMP_BUTTON_CANCEL, TMP_BUTTON_EXTRA1, TMP_SHOW_MENULIST,
- TMP_SHOW_TEXTBOX, TMP_HIDE_MENUANDTEXT, TMP_CHECKBOX_UNCHECKED,
- TMP_CHECKBOX_CHECKED, TMP_HIDE_CHECKBOX, TMP_SELECT_DEFAULT,
- TMP_SELECT_LASTSESSION, TMP_SELECT_CRASH, TMP_SHOW_CLOSED_WINDOW_LIST,
- TMP_DLG_SAVE, TMP_DLG_RENAME,
- prompt_init, prompt_extra1 */
-"use strict";
-
-var TMP_BUTTON_OK = 0;
-var TMP_BUTTON_CANCEL = 1;
-var TMP_BUTTON_EXTRA1 = 2;
-var TMP_SHOW_MENULIST = 1;
-var TMP_SHOW_TEXTBOX = 0;
-var TMP_HIDE_MENUANDTEXT = 2;
-var TMP_CHECKBOX_UNCHECKED = 0;
-var TMP_CHECKBOX_CHECKED = 1;
-var TMP_HIDE_CHECKBOX = 2;
-var TMP_SELECT_DEFAULT = 0;
-var TMP_SELECT_LASTSESSION = 1;
-var TMP_SELECT_CRASH = 2;
-var TMP_SHOW_CLOSED_WINDOW_LIST = 3;
-var TMP_DLG_SAVE = 0;
-var TMP_DLG_RENAME = 1;
-
-/** @type {nsIDialogParamBlock} */
-var dialogParams;
-/** @type {number} */
-var gHideElmParam;
-/** @type {string[]} */
-var gSavedName;
-/** @type {string} */
-var gCancelLabel;
-/** @type {string} */
-var gOrigName;
-/** @type {Element} */
-let documentElement;
-
-function prompt_init() {
- if (!document.documentElement) {
- // not supposed to happen
- return;
- }
- documentElement = document.documentElement;
-
- const dialog = documentElement;
- dialog.addEventListener("dialogaccept", prompt_deinit.bind(dialog, 0));
- dialog.addEventListener("dialogcancel", prompt_deinit.bind(dialog, 1));
- dialog.addEventListener("dialogextra1", prompt_extra1.bind(dialog, 2));
-
- dialogParams = window.arguments[0].QueryInterface(Ci.nsIDialogParamBlock);
- document.title = dialogParams.GetString(0);
-
- // display the main text
- var messageText = dialogParams.GetString(1);
- var messageParent = document.getElementById("tm_info");
- var messageParagraphs = messageText.split("\n");
- gHideElmParam = dialogParams.GetInt(1);
- for (const paragraphs of messageParagraphs) {
- const descriptionNode = document.createElement("description");
- const text = document.createTextNode(paragraphs);
- descriptionNode.appendChild(text);
- messageParent.appendChild(descriptionNode);
- }
-
- // display the menulist
- gHideElmParam = dialogParams.GetInt(1);
- var menuList = document.getElementById("tm_prompt");
- if (gHideElmParam == TMP_SHOW_MENULIST) {
- var index, isDisabled, popup = document.getElementById("tm_prompt_menu");
- if (dialogParams.GetInt(4) == 1)
- window.opener.Tabmix.Sessions.createMenuForDialog(popup, dialogParams.GetInt(3));
- else
- window.opener.TabmixSessionManager.createMenuForDialog(popup, dialogParams.GetInt(3));
- switch (dialogParams.GetInt(3)) {
- case TMP_SELECT_CRASH: index = popup.childNodes.length - 1;
- break;
- case TMP_SHOW_CLOSED_WINDOW_LIST: index = 1; // 0 is menuseparator
- break;
- default:
- index = menuList.defaultIndex;
- if (index >= popup.childNodes.length || index < 0) index = 1;
- isDisabled = popup.childNodes[index]?.getAttribute("disabled") == "true";
- // select the first entry that isn't menuseparator and not "disabled"
- if (!isDisabled) break;
- for (let i = 1; i < popup.childNodes.length; ++i) {
- const item = popup.childNodes[i];
- if (item && item.localName != "menuseparator" &&
- item.getAttribute("disabled") != "true") {
- index = i;
- break;
- }
- }
- }
- menuList.selectedIndex = index;
- } else {
- menuList.hidden = true;
- }
-
- // display the textBox
- var textBox = document.getElementById("tm_textbox");
- if (gHideElmParam == TMP_SHOW_TEXTBOX) {
- messageParent.lastChild?.setAttribute("style", "height:3em");
- gSavedName = dialogParams.GetString(2).split("\n");
- textBox.value = gSavedName.shift() ?? "";
- gOrigName = textBox.value.toLowerCase();
- } else {
- textBox.hidden = true;
- }
-
- // display the checkbox
- var checkBox = document.getElementById("tm_checkbox");
- var check = dialogParams.GetInt(2);
- if (check != TMP_HIDE_CHECKBOX) {
- document.getElementById("checkboxContainer").removeAttribute("collapsed");
- checkBox.checked = check == TMP_CHECKBOX_CHECKED;
- setLabelForNode(checkBox, dialogParams.GetString(3));
- }
-
- // display the command buttons
- const buttons = ["accept", "cancel", "extra1"];
- var btnLabels = dialogParams.GetString(4).split("\n");
- buttons.forEach((type, i) => {
- const button = documentElement.getButton(type);
- if (i < btnLabels.length && btnLabels[i]) {
- setLabelForNode(button, btnLabels[i]);
- } else {
- button.hidden = true; // hide extra button
- }
- });
-
- // Set and focus default button
- var dButton = buttons[dialogParams.GetInt(0)] ?? "accept";
- dialog.defaultButton = dButton;
- if (gHideElmParam == TMP_HIDE_MENUANDTEXT) { // hide menulist & text box and set focus to default Button
- document.getElementById("space_before_checkbox").hidden = true;
- dialog.getButton(dButton).focus();
- }
-
- if (gHideElmParam == TMP_SHOW_TEXTBOX) {
- dialog.getButton("extra1").hidden = true;
- gCancelLabel = dialog.getButton("cancel").label ?? "Cancel";
- inputText(textBox);
- }
-
- // Move to the right location
- moveToAlertPosition();
- centerWindowOnScreen();
-}
-
-/** @param {number} button */
-function prompt_deinit(button) {
- dialogParams.SetInt(4, button); // ok = 0; cancel = 1; extra1 = 2;
- dialogParams.SetInt(5, Number(document.getElementById("tm_checkbox").checked));
- if (gHideElmParam < TMP_HIDE_MENUANDTEXT) {
- if (gHideElmParam == TMP_SHOW_MENULIST) {
- var item = document.getElementById("tm_prompt").selectedItem;
- ///XXX item.fileName - in the new Tabmix.Sessions
- dialogParams.SetString(5, item.session || item.fileName);
- dialogParams.SetInt(6, parseInt(item.getAttribute("value") ?? ""));
- } else {
- dialogParams.SetString(5, document.getElementById("tm_textbox").value);
- }
- }
- // if we are not a modal use a callback function
- if (typeof window._callBackFunction == "function") {
- if (window.opener && !window.opener.closed) {
- let returnData = {
- button: dialogParams.GetInt(4),
- checked: dialogParams.GetInt(5) == TMP_CHECKBOX_CHECKED,
- label: dialogParams.GetString(5),
- value: dialogParams.GetInt(6)
- };
- try {
- window._callBackFunction(returnData);
- } catch (ex) {
- Tabmix.assert(ex, "error in callback " + window._callBackFunction.name);
- }
- }
- delete window._callBackFunction;
- }
-}
-
-/** @param {number} button */
-function prompt_extra1(button) {
- prompt_deinit(button);
- window.close();
-}
-
-// copy from commonDialog.js
-/**
- * @param {HTMLInputElement | HTMLButtonElement} aNode
- * @param {string} aLabel
- * @param {boolean} [aIsLabelFlag]
- */
-function setLabelForNode(aNode, aLabel, aIsLabelFlag) {
- var accessKey = null;
- if (/ *\(&([^&])\)(:?)$/.test(aLabel)) {
- aLabel = RegExp.leftContext + RegExp.$2;
- accessKey = RegExp.$1;
- } else if (/^([^&]*)&(([^&]).*$)/.test(aLabel)) {
- aLabel = RegExp.$1 + RegExp.$2;
- accessKey = RegExp.$3;
- }
-
- // && is the magic sequence to embed an & in your label.
- aLabel = aLabel.replace(/&&/g, "&");
- if (aIsLabelFlag) { // Set text for