diff options
Diffstat (limited to 'application/palemoon')
11 files changed, 204 insertions, 74 deletions
diff --git a/application/palemoon/base/content/autocomplete.xml b/application/palemoon/base/content/autocomplete.xml index 9291b205b..bd0928436 100644 --- a/application/palemoon/base/content/autocomplete.xml +++ b/application/palemoon/base/content/autocomplete.xml @@ -404,7 +404,10 @@ <method name="toggleHistoryPopup"> <body><![CDATA[ - if (!this.popup.popupOpen) + // If this method is called on the same event tick as the popup gets + // hidden, do nothing to avoid re-opening the popup when the drop + // marker is clicked while the popup is still open. + if (!this.popup.isPopupHidingTick && !this.popup.popupOpen) this.showHistoryPopup(); else this.closePopup(); @@ -871,6 +874,7 @@ extends="chrome://global/content/bindings/popup.xml#popup"> <implementation implements="nsIAutoCompletePopup"> <field name="mInput">null</field> <field name="mPopupOpen">false</field> + <field name="mIsPopupHidingTick">false</field> <!-- =================== nsIAutoCompletePopup =================== --> @@ -883,6 +887,9 @@ extends="chrome://global/content/bindings/popup.xml#popup"> <property name="popupOpen" readonly="true" onget="return this.mPopupOpen;"/> + <property name="isPopupHidingTick" readonly="true" + onget="return this.mIsPopupHidingTick;"/> + <method name="closePopup"> <body> <![CDATA[ @@ -989,6 +996,14 @@ extends="chrome://global/content/bindings/popup.xml#popup"> this.removeAttribute("autocompleteinput"); this.mPopupOpen = false; + // Prevent opening popup from historydropmarker mousedown handler + // on the same event tick the popup is hidden by the same mousedown + // event. + this.mIsPopupHidingTick = true; + setTimeout(() => { + this.mIsPopupHidingTick = false; + }, 0); + // Reset the maxRows property to the cached "normal" value, and reset // _normalMaxRows so that we can detect whether it was set by the input // when the popupshowing handler runs. @@ -2103,18 +2118,9 @@ extends="chrome://global/content/bindings/popup.xml#popup"> </binding> <binding id="private-history-dropmarker" extends="chrome://global/content/bindings/general.xml#dropmarker"> - <implementation> - <method name="showPopup"> - <body><![CDATA[ - var textbox = document.getBindingParent(this); - textbox.showHistoryPopup(); - ]]></body> - </method> - </implementation> - <handlers> <handler event="mousedown" button="0"><![CDATA[ - this.showPopup(); + document.getBindingParent(this).toggleHistoryPopup(); ]]></handler> </handlers> </binding> diff --git a/application/palemoon/base/content/browser-places.js b/application/palemoon/base/content/browser-places.js index 5c13a43f9..590fe7ecd 100644 --- a/application/palemoon/base/content/browser-places.js +++ b/application/palemoon/base/content/browser-places.js @@ -189,11 +189,24 @@ var StarUI = { this._itemId = aItemId !== undefined ? aItemId : this._itemId; this.beginBatch(); - this.panel.openPopup(aAnchorElement, aPosition); - + let onPanelReady = fn => { + let target = this.panel; + if (target.parentNode) { + // By targeting the panel's parent and using a capturing listener, we + // can have our listener called before others waiting for the panel to + // be shown (which probably expect the panel to be fully initialized) + target = target.parentNode; + } + target.addEventListener("popupshown", function(event) { + fn(); + }, {"capture": true, "once": true}); + }; gEditItemOverlay.initPanel(this._itemId, - { hiddenRows: ["description", "location", + { onPanelReady, + hiddenRows: ["description", "location", "loadInSidebar", "keyword"] }); + + this.panel.openPopup(aAnchorElement, aPosition); }, panelShown: diff --git a/application/palemoon/base/content/browser.css b/application/palemoon/base/content/browser.css index 91ae9aa18..658655970 100644 --- a/application/palemoon/base/content/browser.css +++ b/application/palemoon/base/content/browser.css @@ -750,7 +750,7 @@ toolbarbutton[type="badged"] { } /* Strict icon size for PMkit 'ui/button' */ -toolbarbutton[pmkit-button="true"] > .toolbarbutton-badge-container > .toolbarbutton-icon { +toolbarbutton[pmkit-button="true"] > .toolbarbutton-badge-stack > .toolbarbutton-icon { width: 16px; height: 16px; } diff --git a/application/palemoon/base/content/urlbarBindings.xml b/application/palemoon/base/content/urlbarBindings.xml index 75411f39b..bf59ea164 100644 --- a/application/palemoon/base/content/urlbarBindings.xml +++ b/application/palemoon/base/content/urlbarBindings.xml @@ -1770,10 +1770,10 @@ extends="chrome://global/content/bindings/toolbarbutton.xml#toolbarbutton"> <content> <children includes="observes|template|menupopup|panel|tooltip"/> - <xul:hbox class="toolbarbutton-badge-container" align="start" pack="end" flex="1"> - <xul:hbox class="toolbarbutton-badge" xbl:inherits="badge"/> + <xul:stack class="toolbarbutton-badge-stack"> <xul:image class="toolbarbutton-icon" xbl:inherits="validate,src=image,label"/> - </xul:hbox> + <xul:label class="toolbarbutton-badge" xbl:inherits="value=badge" top="0" end="0"/> + </xul:stack> <xul:label class="toolbarbutton-text" crop="right" flex="1" xbl:inherits="value=label,accesskey,crop"/> </content> diff --git a/application/palemoon/components/places/content/editBookmarkOverlay.js b/application/palemoon/components/places/content/editBookmarkOverlay.js index 98bfcccd7..43645cc73 100644 --- a/application/palemoon/components/places/content/editBookmarkOverlay.js +++ b/application/palemoon/components/places/content/editBookmarkOverlay.js @@ -16,6 +16,7 @@ var gEditItemOverlay = { _itemType: -1, _readOnly: false, _hiddenRows: [], + _onPanelReady: false, _observersAdded: false, _staticFoldersListBuilt: false, _initialized: false, @@ -50,6 +51,7 @@ var gEditItemOverlay = { this._readOnly = aInfo && aInfo.forceReadOnly; this._titleOverride = aInfo && aInfo.titleOverride ? aInfo.titleOverride : ""; + this._onPanelReady = aInfo && aInfo.onPanelReady; }, _showHideRows: function EIO__showHideRows() { @@ -219,7 +221,15 @@ var gEditItemOverlay = { this._observersAdded = true; } - this._initialized = true; + let focusElement = () => { + this._initialized = true; + }; + + if (this._onPanelReady) { + this._onPanelReady(focusElement); + } else { + focusElement(); + } }, /** @@ -243,11 +253,7 @@ var gEditItemOverlay = { if (field.value != aValue) { field.value = aValue; - - // clear the undo stack - var editor = field.editor; - if (editor) - editor.transactionManager.clear(); + this._editorTransactionManagerClear(field); } }, @@ -352,6 +358,26 @@ var gEditItemOverlay = { return document.getElementById("editBMPanel_" + aID); }, + _editorTransactionManagerClear: function EIO__editorTransactionManagerClear(aItem) { + // Clear the editor's undo stack + let transactionManager; + try { + transactionManager = aItem.editor.transactionManager; + } catch (e) { + // When retrieving the transaction manager, editor may be null resulting + // in a TypeError. Additionally, the transaction manager may not + // exist yet, which causes access to it to throw NS_ERROR_FAILURE. + // In either event, the transaction manager doesn't exist it, so we + // don't need to worry about clearing it. + if (!(e instanceof TypeError) && e.result != Cr.NS_ERROR_FAILURE) { + throw e; + } + } + if (transactionManager) { + transactionManager.clear(); + } + }, + _getItemStaticTitle: function EIO__getItemStaticTitle() { if (this._titleOverride) return this._titleOverride; @@ -370,11 +396,7 @@ var gEditItemOverlay = { var namePicker = this._element("namePicker"); namePicker.value = this._getItemStaticTitle(); namePicker.readOnly = this._readOnly; - - // clear the undo stack - var editor = namePicker.editor; - if (editor) - editor.transactionManager.clear(); + this._editorTransactionManagerClear(namePicker); }, uninitPanel: function EIO_uninitPanel(aHideCollapsibleElements) { @@ -963,8 +985,7 @@ var gEditItemOverlay = { var namePicker = this._element("namePicker"); if (namePicker.value != aValue) { namePicker.value = aValue; - // clear undo stack - namePicker.editor.transactionManager.clear(); + this._editorTransactionManagerClear(namePicker); } break; case "uri": diff --git a/application/palemoon/components/search/content/engineManager.js b/application/palemoon/components/search/content/engineManager.js index 92b6d59b7..993d48b06 100644 --- a/application/palemoon/components/search/content/engineManager.js +++ b/application/palemoon/components/search/content/engineManager.js @@ -2,7 +2,12 @@ * 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/. */ +Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); Components.utils.import("resource://gre/modules/Services.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils", + "resource://gre/modules/PlacesUtils.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "Task", + "resource://gre/modules/Task.jsm"); const Ci = Components.interfaces; const Cc = Components.classes; @@ -105,7 +110,7 @@ var gEngineManagerDialog = { document.getElementById("engineList").focus(); }, - editKeyword: function engineManager_editKeyword() { + editKeyword: Task.async(function* engineManager_editKeyword() { var selectedEngine = gEngineView.selectedEngine; if (!selectedEngine) return; @@ -121,12 +126,8 @@ var gEngineManagerDialog = { var dupName = ""; if (alias.value != "") { - try { - let bmserv = Cc["@mozilla.org/browser/nav-bookmarks-service;1"]. - getService(Ci.nsINavBookmarksService); - if (bmserv.getURIForKeyword(alias.value)) - bduplicate = true; - } catch(ex) {} + // Check for duplicates in Places keywords. + bduplicate = !!(yield PlacesUtils.keywords.fetch(alias.value)); // Check for duplicates in changes we haven't committed yet let engines = gEngineView._engineStore.engines; @@ -154,7 +155,7 @@ var gEngineManagerDialog = { break; } } - }, + }), onSelect: function engineManager_onSelect() { // Buttons only work if an engine is selected and it's not the last engine, diff --git a/application/palemoon/components/search/content/engineManager.xul b/application/palemoon/components/search/content/engineManager.xul index 50181c066..1152ef8db 100644 --- a/application/palemoon/components/search/content/engineManager.xul +++ b/application/palemoon/components/search/content/engineManager.xul @@ -36,7 +36,7 @@ oncommand="gEngineManagerDialog.bump(-1);" disabled="true"/> <command id="cmd_editkeyword" - oncommand="gEngineManagerDialog.editKeyword();" + oncommand="gEngineManagerDialog.editKeyword().catch(Components.utils.reportError);" disabled="true"/> </commandset> diff --git a/application/palemoon/modules/PopupNotifications.jsm b/application/palemoon/modules/PopupNotifications.jsm index d2faf52c3..15c8915ed 100644 --- a/application/palemoon/modules/PopupNotifications.jsm +++ b/application/palemoon/modules/PopupNotifications.jsm @@ -4,9 +4,9 @@ this.EXPORTED_SYMBOLS = ["PopupNotifications"]; -var Cc = Components.classes, Ci = Components.interfaces; +var Cc = Components.classes, Ci = Components.interfaces, Cu = Components.utils; -Components.utils.import("resource://gre/modules/Services.jsm"); +Cu.import("resource://gre/modules/Services.jsm"); const NOTIFICATION_EVENT_DISMISSED = "dismissed"; const NOTIFICATION_EVENT_REMOVED = "removed"; @@ -33,6 +33,18 @@ function getAnchorFromBrowser(aBrowser) { return null; } +function getNotificationFromElement(aElement) { + // Need to find the associated notification object, which is a bit tricky + // since it isn't associated with the element directly - this is kind of + // gross and very dependent on the structure of the popupnotification + // binding's content. + let notificationEl; + let parent = aElement; + while (parent && (parent = aElement.ownerDocument.getBindingParent(parent))) + notificationEl = parent; + return notificationEl; +} + /** * Notification object describes a single popup notification. * @@ -194,7 +206,8 @@ PopupNotifications.prototype = { * - label (string): the button's label. * - accessKey (string): the button's accessKey. * - callback (function): a callback to be invoked when the button is - * pressed. + * pressed, is passed an object that contains the following fields: + * - checkboxChecked: (boolean) If the optional checkbox is checked. * If null, the notification will not have a button, and * secondaryActions will be ignored. * @param secondaryActions @@ -234,6 +247,26 @@ PopupNotifications.prototype = { * removed when they would have otherwise been dismissed * (i.e. any time the popup is closed due to user * interaction). + * checkbox: An object that allows you to add a checkbox and + * control its behavior with these fields: + * label: + * (required) Label to be shown next to the checkbox. + * checked: + * (optional) Whether the checkbox should be checked + * by default. Defaults to false. + * checkedState: + * (optional) An object that allows you to customize + * the notification state when the checkbox is checked. + * disableMainAction: + * (optional) Whether the mainAction is disabled. + * Defaults to false. + * warningLabel: + * (optional) A (warning) text that is shown below the + * checkbox. Pass null to hide. + * uncheckedState: + * (optional) An object that allows you to customize + * the notification state when the checkbox is not checked. + * Has the same attributes as checkedState. * popupIconURL: * A string. URL of the image to be displayed in the popup. * Normally specified in CSS using list-style-image and the @@ -552,6 +585,25 @@ PopupNotifications.prototype = { } } + let checkbox = n.options.checkbox; + if (checkbox && checkbox.label) { + let checked = n._checkboxChecked != null ? n._checkboxChecked : !!checkbox.checked; + + popupnotification.setAttribute("checkboxhidden", "false"); + popupnotification.setAttribute("checkboxchecked", checked); + popupnotification.setAttribute("checkboxlabel", checkbox.label); + + popupnotification.setAttribute("checkboxcommand", "PopupNotifications._onCheckboxCommand(event);"); + + if (checked) { + this._setNotificationUIState(popupnotification, checkbox.checkedState); + } else { + this._setNotificationUIState(popupnotification, checkbox.uncheckedState); + } + } else { + popupnotification.setAttribute("checkboxhidden", "true"); + } + this.panel.appendChild(popupnotification); // The popupnotification may be hidden if we got it from the chrome @@ -560,6 +612,32 @@ PopupNotifications.prototype = { }, this); }, + _setNotificationUIState(notification, state={}) { + notification.setAttribute("mainactiondisabled", state.disableMainAction || "false"); + + if (state.warningLabel) { + notification.setAttribute("warninglabel", state.warningLabel); + notification.setAttribute("warninghidden", "false"); + } else { + notification.setAttribute("warninghidden", "true"); + } + }, + + _onCheckboxCommand(event) { + let notificationEl = getNotificationFromElement(event.originalTarget); + let checked = notificationEl.checkbox.checked; + let notification = notificationEl.notification; + + // Save checkbox state to be able to persist it when re-opening the doorhanger. + notification._checkboxChecked = checked; + + if (checked) { + this._setNotificationUIState(notificationEl, notification.options.checkbox.checkedState); + } else { + this._setNotificationUIState(notificationEl, notification.options.checkbox.uncheckedState); + } + }, + _showPanel: function PopupNotifications_showPanel(notificationsToShow, anchorElement) { this.panel.hidden = false; @@ -752,8 +830,12 @@ PopupNotifications.prototype = { }, _fireCallback: function PopupNotifications_fireCallback(n, event) { - if (n.options.eventCallback) - n.options.eventCallback.call(n, event); + try { + if (n.options.eventCallback) + n.options.eventCallback.call(n, event); + } catch (error) { + Cu.reportError(error); + } }, _onPopupHidden: function PopupNotifications_onPopupHidden(event) { @@ -789,15 +871,7 @@ PopupNotifications.prototype = { }, _onButtonCommand: function PopupNotifications_onButtonCommand(event) { - // Need to find the associated notification object, which is a bit tricky - // since it isn't associated with the button directly - this is kind of - // gross and very dependent on the structure of the popupnotification - // binding's content. - let target = event.originalTarget; - let notificationEl; - let parent = target; - while (parent && (parent = target.ownerDocument.getBindingParent(parent))) - notificationEl = parent; + let notificationEl = getNotificationFromElement(event.originalTarget); if (!notificationEl) throw "PopupNotifications_onButtonCommand: couldn't find notification element"; @@ -819,7 +893,14 @@ PopupNotifications.prototype = { timeSinceShown + "ms"); return; } - notification.mainAction.callback.call(); + + try { + notification.mainAction.callback.call(undefined, { + checkboxChecked: notificationEl.checkbox.checked + }); + } catch (error) { + Cu.reportError(error); + } this._remove(notification); this._update(); @@ -830,8 +911,16 @@ PopupNotifications.prototype = { if (!target.action || !target.notification) throw "menucommand target has no associated action/notification"; + let notificationEl = target.parentElement; event.stopPropagation(); - target.action.callback.call(); + + try { + target.action.callback.call(undefined, { + checkboxChecked: notificationEl.checkbox.checked + }); + } catch (error) { + Cu.reportError(error); + } this._remove(target.notification); this._update(); diff --git a/application/palemoon/themes/linux/browser.css b/application/palemoon/themes/linux/browser.css index 334062613..4f4964db8 100644 --- a/application/palemoon/themes/linux/browser.css +++ b/application/palemoon/themes/linux/browser.css @@ -2096,12 +2096,12 @@ toolbar[mode="text"] toolbarbutton.chevron > .toolbarbutton-icon { } %endif -.toolbarbutton-badge-container { +.toolbarbutton-badge-stack { margin: 5px 3px; position: relative; } -toolbar[iconsize="small"] .toolbarbutton-badge-container { +toolbar[iconsize="small"] .toolbarbutton-badge-stack { margin: 0; } diff --git a/application/palemoon/themes/osx/browser.css b/application/palemoon/themes/osx/browser.css index a66ddacfc..8d709d8e1 100644 --- a/application/palemoon/themes/osx/browser.css +++ b/application/palemoon/themes/osx/browser.css @@ -452,7 +452,7 @@ toolbar[mode=full] .toolbarbutton-1 > .toolbarbutton-menubutton-button { } @navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-icon, -@navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-badge-container, +@navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-badge-stack, @navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-menubutton-button > .toolbarbutton-icon, @navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon { padding: 2px 6px; @@ -470,7 +470,7 @@ toolbar[mode=full] .toolbarbutton-1 > .toolbarbutton-menubutton-button { } @navbarLargeIcons@ .toolbarbutton-1:not(:-moz-any(@primaryToolbarButtons@)) > .toolbarbutton-icon, -@navbarLargeIcons@ .toolbarbutton-1:not(:-moz-any(@primaryToolbarButtons@)) > .toolbarbutton-badge-container, +@navbarLargeIcons@ .toolbarbutton-1:not(:-moz-any(@primaryToolbarButtons@)) > .toolbarbutton-badge-stack, @navbarLargeIcons@ .toolbarbutton-1:not(:-moz-any(@primaryToolbarButtons@)) > .toolbarbutton-menubutton-button > .toolbarbutton-icon { padding: 3px 7px; } @@ -521,7 +521,7 @@ toolbar[mode=full] .toolbarbutton-1 > .toolbarbutton-menubutton-button { @navbarLargeIcons@ .toolbarbutton-1:not([disabled]):-moz-any(:hover,[open]) > .toolbarbutton-menubutton-button > .toolbarbutton-icon, @navbarLargeIcons@ .toolbarbutton-1:not([disabled]):hover > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon, @navbarLargeIcons@ .toolbarbutton-1:not([disabled]):not([checked]):not([open]):not(:active):hover > .toolbarbutton-icon, -@navbarLargeIcons@ .toolbarbutton-1:not([disabled]):not([checked]):not([open]):not(:active):hover > .toolbarbutton-badge-container, +@navbarLargeIcons@ .toolbarbutton-1:not([disabled]):not([checked]):not([open]):not(:active):hover > .toolbarbutton-badge-stack, @conditionalForwardWithUrlbar@ > .toolbarbutton-1:-moz-any([disabled],:not([open]):not([disabled]):not(:active)) > .toolbarbutton-icon { background-image: linear-gradient(hsla(0,0%,100%,.8), hsla(0,0%,100%,.5)); border-color: hsla(210,54%,20%,.25) hsla(210,54%,20%,.3) hsla(210,54%,20%,.35); @@ -544,7 +544,7 @@ toolbar[mode=full] .toolbarbutton-1 > .toolbarbutton-menubutton-button { @navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-menubutton-button:not([disabled]):hover:active > .toolbarbutton-icon, @navbarLargeIcons@ .toolbarbutton-1[open] > .toolbarbutton-menubutton-dropmarker:not([disabled]) > .dropmarker-icon, @navbarLargeIcons@ .toolbarbutton-1:not([disabled]):-moz-any([open],[checked],:hover:active) > .toolbarbutton-icon, -@navbarLargeIcons@ .toolbarbutton-1:not([disabled]):-moz-any([open],[checked],:hover:active) > .toolbarbutton-badge-container { +@navbarLargeIcons@ .toolbarbutton-1:not([disabled]):-moz-any([open],[checked],:hover:active) > .toolbarbutton-badge-stack { background-image: linear-gradient(hsla(0,0%,100%,.6), hsla(0,0%,100%,.1)); background-color: hsla(210,54%,20%,.15); border-color: hsla(210,54%,20%,.3) hsla(210,54%,20%,.35) hsla(210,54%,20%,.4); @@ -2371,23 +2371,23 @@ toolbar[brighttext] #addonbar-closebutton { } %endif -.toolbarbutton-badge-container { +.toolbarbutton-badge-stack { margin: 0; padding: 0; position: relative; } -@navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-badge-container { +@navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-badge-stack { padding: 2px 5px; } -.toolbarbutton-1 > .toolbarbutton-badge-container > .toolbar-icon { +.toolbarbutton-1 > .toolbarbutton-badge-stack > .toolbar-icon { position: absolute; top: 2px; right: 2px; } -.toolbarbutton-badge-container > .toolbarbutton-icon[label]:not([label=""]) { +.toolbarbutton-badge-stack > .toolbarbutton-icon[label]:not([label=""]) { -moz-margin-end: 0; } diff --git a/application/palemoon/themes/windows/browser.css b/application/palemoon/themes/windows/browser.css index a64955f0f..1c51accae 100644 --- a/application/palemoon/themes/windows/browser.css +++ b/application/palemoon/themes/windows/browser.css @@ -825,7 +825,7 @@ toolbar[mode=full] .toolbarbutton-1 > .toolbarbutton-menubutton-button { } @navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-icon, -@navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-badge-container, +@navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-badge-stack, @navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-menubutton-button > .toolbarbutton-icon, @navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon { padding: 2px 6px; @@ -848,7 +848,7 @@ toolbar[mode=full] .toolbarbutton-1 > .toolbarbutton-menubutton-button { } @navbarLargeIcons@ .toolbarbutton-1:not(:-moz-any(@primaryToolbarButtons@)) > .toolbarbutton-icon, -@navbarLargeIcons@ .toolbarbutton-1:not(:-moz-any(@primaryToolbarButtons@)) > .toolbarbutton-badge-container, +@navbarLargeIcons@ .toolbarbutton-1:not(:-moz-any(@primaryToolbarButtons@)) > .toolbarbutton-badge-stack, @navbarLargeIcons@ .toolbarbutton-1:not(:-moz-any(@primaryToolbarButtons@)) > .toolbarbutton-menubutton-button > .toolbarbutton-icon { padding: 3px 7px; } @@ -897,7 +897,7 @@ toolbar[mode=full] .toolbarbutton-1 > .toolbarbutton-menubutton-button { } @navbarLargeIcons@ .toolbarbutton-1:not([disabled]):not([checked]):not([open]):not(:active):hover > .toolbarbutton-icon, -@navbarLargeIcons@ .toolbarbutton-1:not([disabled]):not([checked]):not([open]):not(:active):hover > .toolbarbutton-badge-container, +@navbarLargeIcons@ .toolbarbutton-1:not([disabled]):not([checked]):not([open]):not(:active):hover > .toolbarbutton-badge-stack, @navbarLargeIcons@ .toolbarbutton-1:not([disabled]):-moz-any(:hover,[open]) > .toolbarbutton-menubutton-button > .toolbarbutton-icon, @navbarLargeIcons@ .toolbarbutton-1:not([disabled]):hover > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon { background-image: linear-gradient(hsla(0,0%,100%,.8), hsla(0,0%,100%,.5)); @@ -916,7 +916,7 @@ toolbar[mode=full] .toolbarbutton-1 > .toolbarbutton-menubutton-button { } @navbarLargeIcons@ .toolbarbutton-1:not([disabled]):-moz-any([open],[checked],:hover:active) > .toolbarbutton-icon, -@navbarLargeIcons@ .toolbarbutton-1:not([disabled]):-moz-any([open],[checked],:hover:active) > .toolbarbutton-badge-container, +@navbarLargeIcons@ .toolbarbutton-1:not([disabled]):-moz-any([open],[checked],:hover:active) > .toolbarbutton-badge-stack, @navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-menubutton-button:not([disabled]):hover:active > .toolbarbutton-icon, @navbarLargeIcons@ .toolbarbutton-1[open] > .toolbarbutton-menubutton-dropmarker:not([disabled]) > .dropmarker-icon { background-image: linear-gradient(hsla(0,0%,100%,.6), hsla(0,0%,100%,.1)); @@ -2845,23 +2845,23 @@ toolbar[brighttext] #addonbar-closebutton { } %endif -.toolbarbutton-badge-container { +.toolbarbutton-badge-stack { margin: 0; padding: 0; position: relative; } -@navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-badge-container { +@navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-badge-stack { padding: 2px 5px; } -.toolbarbutton-1 > .toolbarbutton-badge-container > .toolbar-icon { +.toolbarbutton-1 > .toolbarbutton-badge-stack > .toolbar-icon { position: absolute; top: 2px; right: 2px; } -.toolbarbutton-badge-container > .toolbarbutton-icon[label]:not([label=""]) { +.toolbarbutton-badge-stack > .toolbarbutton-icon[label]:not([label=""]) { -moz-margin-end: 0; } |