summaryrefslogtreecommitdiffstats
path: root/browser/base/content/browser-customization.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/browser-customization.js')
-rw-r--r--browser/base/content/browser-customization.js100
1 files changed, 100 insertions, 0 deletions
diff --git a/browser/base/content/browser-customization.js b/browser/base/content/browser-customization.js
new file mode 100644
index 000000000..d5d51b893
--- /dev/null
+++ b/browser/base/content/browser-customization.js
@@ -0,0 +1,100 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Customization handler prepares this browser window for entering and exiting
+ * customization mode by handling customizationstarting and customizationending
+ * events.
+ */
+var CustomizationHandler = {
+ handleEvent: function(aEvent) {
+ switch (aEvent.type) {
+ case "customizationstarting":
+ this._customizationStarting();
+ break;
+ case "customizationchange":
+ this._customizationChange();
+ break;
+ case "customizationending":
+ this._customizationEnding(aEvent.detail);
+ break;
+ }
+ },
+
+ isCustomizing: function() {
+ return document.documentElement.hasAttribute("customizing");
+ },
+
+ _customizationStarting: function() {
+ // Disable the toolbar context menu items
+ let menubar = document.getElementById("main-menubar");
+ for (let childNode of menubar.childNodes)
+ childNode.setAttribute("disabled", true);
+
+ let cmd = document.getElementById("cmd_CustomizeToolbars");
+ cmd.setAttribute("disabled", "true");
+
+ UpdateUrlbarSearchSplitterState();
+
+ CombinedStopReload.uninit();
+ PlacesToolbarHelper.customizeStart();
+ DownloadsButton.customizeStart();
+
+ // The additional padding on the sides of the browser
+ // can cause the customize tab to get clipped.
+ let tabContainer = gBrowser.tabContainer;
+ if (tabContainer.getAttribute("overflow") == "true") {
+ let tabstrip = tabContainer.mTabstrip;
+ tabstrip.ensureElementIsVisible(gBrowser.selectedTab, true);
+ }
+ },
+
+ _customizationChange: function() {
+ PlacesToolbarHelper.customizeChange();
+ },
+
+ _customizationEnding: function(aDetails) {
+ // Update global UI elements that may have been added or removed
+ if (aDetails.changed) {
+ gURLBar = document.getElementById("urlbar");
+
+ gHomeButton.updateTooltip();
+ XULBrowserWindow.init();
+
+ if (AppConstants.platform != "macosx")
+ updateEditUIVisibility();
+
+ // Hacky: update the PopupNotifications' object's reference to the iconBox,
+ // if it already exists, since it may have changed if the URL bar was
+ // added/removed.
+ if (!window.__lookupGetter__("PopupNotifications")) {
+ PopupNotifications.iconBox =
+ document.getElementById("notification-popup-box");
+ }
+
+ }
+
+ PlacesToolbarHelper.customizeDone();
+ DownloadsButton.customizeDone();
+
+ // The url bar splitter state is dependent on whether stop/reload
+ // and the location bar are combined, so we need this ordering
+ CombinedStopReload.init();
+ UpdateUrlbarSearchSplitterState();
+
+ // Update the urlbar
+ URLBarSetURI();
+ XULBrowserWindow.asyncUpdateUI();
+
+ // Re-enable parts of the UI we disabled during the dialog
+ let menubar = document.getElementById("main-menubar");
+ for (let childNode of menubar.childNodes)
+ childNode.setAttribute("disabled", false);
+ let cmd = document.getElementById("cmd_CustomizeToolbars");
+ cmd.removeAttribute("disabled");
+
+ gBrowser.selectedBrowser.focus();
+ }
+}