author | Gijs Kruitbosch <gijskruitbosch@gmail.com> |
Thu, 05 Dec 2013 23:11:24 +0100 | |
changeset 159217 | 09714c24277b8b5d0c9d63f262b7d2744d4769ff |
parent 159138 | 80325b9b68545a8d153eff3212a9a0eeae0dfa2b |
child 159218 | 17c63887d608abb2ffd778e1930fdc0b48502457 |
push id | 25777 |
push user | ryanvm@gmail.com |
push date | Fri, 06 Dec 2013 21:03:53 +0000 |
treeherder | mozilla-central@b3806ae5399d [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jaws |
bugs | 940292 |
milestone | 28.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
browser/base/content/browser-places.js | file | annotate | diff | comparison | revisions | |
browser/components/places/content/browserPlacesViews.js | file | annotate | diff | comparison | revisions |
--- a/browser/base/content/browser-places.js +++ b/browser/base/content/browser-places.js @@ -864,48 +864,51 @@ var PlacesMenuDNDHandler = { */ let PlacesToolbarHelper = { _place: "place:folder=TOOLBAR", get _viewElt() { return document.getElementById("PlacesToolbar"); }, - init: function PTH_init() { + init: function PTH_init(forceToolbarOverflowCheck) { let viewElt = this._viewElt; if (!viewElt || viewElt._placesView) return; // If the bookmarks toolbar item is: // - not in a toolbar, or; // - the toolbar is collapsed, or; // - the toolbar is hidden some other way: // don't initialize. Also, there is no need to initialize the toolbar if // customizing, because that will happen when the customization is done. let toolbar = this._getParentToolbar(viewElt); if (!toolbar || toolbar.collapsed || this._isCustomizing || getComputedStyle(toolbar, "").display == "none") return; new PlacesToolbar(this._place); + if (forceToolbarOverflowCheck) { + viewElt._placesView.updateOverflowStatus(); + } }, customizeStart: function PTH_customizeStart() { try { let viewElt = this._viewElt; if (viewElt && viewElt._placesView) viewElt._placesView.uninit(); } finally { this._isCustomizing = true; } }, customizeDone: function PTH_customizeDone() { this._isCustomizing = false; - this.init(); + this.init(true); }, onPlaceholderCommand: function () { let widgetGroup = CustomizableUI.getWidget("personal-bookmarks"); let widget = widgetGroup.forWindow(window); if (widget.overflowed || widgetGroup.areaType == CustomizableUI.TYPE_MENU_PANEL) { PlacesCommandHook.showPlacesOrganizer("BookmarksToolbar");
--- a/browser/components/places/content/browserPlacesViews.js +++ b/browser/components/places/content/browserPlacesViews.js @@ -1032,42 +1032,24 @@ PlacesToolbar.prototype = { break; case "resize": // This handler updates nodes visibility in both the toolbar // and the chevron popup when a window resize does not change // the overflow status of the toolbar. this.updateChevron(); break; case "overflow": - if (aEvent.target != aEvent.currentTarget) - return; - - // Ignore purely vertical overflows. - if (aEvent.detail == 0) + if (!this._isOverflowStateEventRelevant(aEvent)) return; - - // Attach the popup binding to the chevron popup if it has not yet - // been initialized. - if (!this._chevronPopup.hasAttribute("type")) { - this._chevronPopup.setAttribute("place", this.place); - this._chevronPopup.setAttribute("type", "places"); - } - this._chevron.collapsed = false; - this.updateChevron(); + this._onOverflow(); break; case "underflow": - if (aEvent.target != aEvent.currentTarget) + if (!this._isOverflowStateEventRelevant(aEvent)) return; - - // Ignore purely vertical underflows. - if (aEvent.detail == 0) - return; - - this.updateChevron(); - this._chevron.collapsed = true; + this._onUnderflow(); break; case "TabOpen": case "TabClose": this.updateChevron(); break; case "dragstart": this._onDragStart(aEvent); break; @@ -1098,16 +1080,45 @@ PlacesToolbar.prototype = { case "popuphidden": this._onPopupHidden(aEvent); break; default: throw "Trying to handle unexpected event."; } }, + updateOverflowStatus: function() { + if (this._rootElt.scrollLeftMax > 0) { + this._onOverflow(); + } else { + this._onUnderflow(); + } + }, + + _isOverflowStateEventRelevant: function PT_isOverflowStateEventRelevant(aEvent) { + // Ignore events not aimed at ourselves, as well as purely vertical ones: + return aEvent.target == aEvent.currentTarget && aEvent.detail > 0; + }, + + _onOverflow: function PT_onOverflow() { + // Attach the popup binding to the chevron popup if it has not yet + // been initialized. + if (!this._chevronPopup.hasAttribute("type")) { + this._chevronPopup.setAttribute("place", this.place); + this._chevronPopup.setAttribute("type", "places"); + } + this._chevron.collapsed = false; + this.updateChevron(); + }, + + _onUnderflow: function PT_onUnderflow() { + this.updateChevron(); + this._chevron.collapsed = true; + }, + updateChevron: function PT_updateChevron() { // If the chevron is collapsed there's nothing to update. if (this._chevron.collapsed) return; // Update the chevron on a timer. This will avoid repeated work when // lot of changes happen in a small timeframe. if (this._updateChevronTimer)