From c1d061934ad2899512317bbdbde781ac7304f069 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A3o=20Gottwald?= Date: Fri, 15 May 2009 15:33:59 +0200 Subject: [PATCH] Bug 491221 - default button styling missing in the bookmarks properties dialog. r=mak, enn --- browser/base/content/browser-places.js | 36 +++++++++---------- .../places/content/bookmarkProperties.js | 26 -------------- .../places/content/bookmarkProperties.xul | 1 - toolkit/content/widgets/tree.xml | 13 ++++--- 4 files changed, 27 insertions(+), 49 deletions(-) diff --git a/browser/base/content/browser-places.js b/browser/base/content/browser-places.js index 58761cc6a5f3..00acb857f5e5 100644 --- a/browser/base/content/browser-places.js +++ b/browser/base/content/browser-places.js @@ -65,7 +65,7 @@ var StarUI = { // to avoid impacting startup / new window performance element.hidden = false; element.addEventListener("popuphidden", this, false); - element.addEventListener("keypress", this, true); + element.addEventListener("keypress", this, false); return this.panel = element; }, @@ -112,25 +112,25 @@ var StarUI = { } break; case "keypress": - if (aEvent.keyCode == KeyEvent.DOM_VK_ESCAPE) { - // If the panel is visible the ESC key is mapped to the cancel button - // unless we are editing a folder in the folderTree, or an - // autocomplete popup is open. - if (!this._element("editBookmarkPanelContent").hidden) { - var elt = aEvent.target; - if ((elt.localName != "tree" || !elt.hasAttribute("editing")) && - !elt.popupOpen) - this.cancelButtonOnCommand(); - } + if (aEvent.getPreventDefault()) { + // The event has already been consumed inside of the panel. + break; } - else if (aEvent.keyCode == KeyEvent.DOM_VK_RETURN) { - // hide the panel unless the folder tree or an expander are focused - // or an autocomplete popup is open. - if (aEvent.target.localName != "tree" && - aEvent.target.className != "expander-up" && - aEvent.target.className != "expander-down" && - !aEvent.target.popupOpen) + switch (aEvent.keyCode) { + case KeyEvent.DOM_VK_ESCAPE: + if (!this._element("editBookmarkPanelContent").hidden) + this.cancelButtonOnCommand(); + break; + case KeyEvent.DOM_VK_RETURN: + if (aEvent.target.className == "expander-up" || + aEvent.target.className == "expander-down" || + aEvent.target.id == "editBMPanel_newFolderButton") { + //XXX Why is this necessary? The getPreventDefault() check should + // be enough. + break; + } this.panel.hidePopup(); + break; } break; } diff --git a/browser/components/places/content/bookmarkProperties.js b/browser/components/places/content/bookmarkProperties.js index abd6ba5d2dfe..e1905cd2ba2c 100644 --- a/browser/components/places/content/bookmarkProperties.js +++ b/browser/components/places/content/bookmarkProperties.js @@ -374,10 +374,6 @@ var BookmarkPropertiesPanel = { this._element("siteLocationField") .addEventListener("input", this, false); } - - // Set on document to get the event before an autocomplete popup could - // be hidden on Enter. - document.addEventListener("keypress", this, true); } window.sizeToContent(); @@ -388,27 +384,6 @@ var BookmarkPropertiesPanel = { handleEvent: function BPP_handleEvent(aEvent) { var target = aEvent.target; switch (aEvent.type) { - case "keypress": - function canAcceptDialog(aElement) { - // on Enter we accept the dialog unless: - // - the folder tree is focused - // - an expander is focused - // - an autocomplete (eg. tags) popup is open - // - a menulist is open - // - a multiline textbox is focused - return aElement.localName != "tree" && - aElement.className != "expander-up" && - aElement.className != "expander-down" && - !aElement.popupOpen && - !aElement.open && - !(aElement.localName == "textbox" && - aElement.getAttribute("multiline") == "true"); - } - if (aEvent.keyCode == KeyEvent.DOM_VK_RETURN && - canAcceptDialog(target)) - document.documentElement.acceptDialog(); - break; - case "input": if (target.id == "editBMPanel_locationField" || target.id == "editBMPanel_feedLocationField" || @@ -506,7 +481,6 @@ var BookmarkPropertiesPanel = { // currently registered EventListener on the EventTarget has no effect. this._element("tagsSelectorRow") .removeEventListener("DOMAttrModified", this, false); - document.removeEventListener("keypress", this, true); this._element("folderTreeRow") .removeEventListener("DOMAttrModified", this, false); this._element("locationField") diff --git a/browser/components/places/content/bookmarkProperties.xul b/browser/components/places/content/bookmarkProperties.xul index 8af977c759b9..28a0fd3407de 100644 --- a/browser/components/places/content/bookmarkProperties.xul +++ b/browser/components/places/content/bookmarkProperties.xul @@ -54,7 +54,6 @@ @@ -722,11 +724,13 @@ if (this._editingColumn) { this.stopEditing(true); this.focus(); - event.stopPropagation(); } else { - this.changeOpenState(this.currentIndex); + if (!this.changeOpenState(this.currentIndex)) + return; // don't consume the event if the open state wasn't changed } + event.stopPropagation(); + event.preventDefault(); ]]> @@ -735,6 +739,7 @@ this.stopEditing(false); this.focus(); event.stopPropagation(); + event.preventDefault(); } ]]>