diff --git a/mailnews/compose/resources/content/addressingWidgetOverlay.js b/mailnews/compose/resources/content/addressingWidgetOverlay.js
index 3ca91986e10..cac74d24a4c 100644
--- a/mailnews/compose/resources/content/addressingWidgetOverlay.js
+++ b/mailnews/compose/resources/content/addressingWidgetOverlay.js
@@ -141,6 +141,7 @@ function CompFields2Recipients(msgCompFields, msgType)
dump("replacing child in comp fields 2 recips \n");
var parent = treeChildren.parentNode;
parent.replaceChild(newTreeChildrenNode, treeChildren);
+ awFitDummyRows();
setTimeout("awFinishCopyNodes();", 0);
}
}
@@ -414,7 +415,10 @@ function awAppendNewRow(setFocus)
{
var lastRecipientType = awGetPopupElement(top.MAX_RECIPIENTS).selectedItem.getAttribute("data");
- var newNode = awCopyNode(treeitem1, body, 0);
+ var nextDummy = awGetNextDummyRow();
+ var newNode = awCopyNode(treeitem1, body, nextDummy);
+ if (nextDummy) body.removeChild(nextDummy);
+
top.MAX_RECIPIENTS++;
var input = newNode.getElementsByTagName(awInputElementName());
@@ -529,7 +533,8 @@ function awRemoveRow(row)
var body = document.getElementById('addressWidgetBody');
awRemoveNodeAndChildren(body, awGetTreeItem(row));
-
+ awFitDummyRows();
+
top.MAX_RECIPIENTS --;
}
@@ -546,7 +551,6 @@ function awRemoveNodeAndChildren(parent, nodeToRemove)
}
parent.removeChild(nodeToRemove);
-
}
function awSetFocus(row, inputElement)
@@ -762,3 +766,121 @@ function awKeyDown(event, treeElement)
break;
}
}
+
+/* ::::::::::: addressing widget dummy rows ::::::::::::::::: */
+
+var gAWContentHeight = 0;
+var gAWRowHeight = 0;
+
+function awFitDummyRows()
+{
+ awCalcContentHeight();
+ awCreateOrRemoveDummyRows();
+}
+
+function awCreateOrRemoveDummyRows()
+{
+ var body = document.getElementById("addressWidgetBody");
+ var bodyHeight = body.boxObject.height;
+
+ // remove rows to remove scrollbar
+ var kids = body.childNodes;
+ for (var i = kids.length-1; gAWContentHeight > bodyHeight && i >= 0; --i) {
+ if (kids[i].hasAttribute("_isDummyRow")) {
+ gAWContentHeight -= gAWRowHeight;
+ body.removeChild(kids[i]);
+ }
+ }
+
+ // add rows to fill space
+ if (gAWRowHeight) {
+ while (gAWContentHeight+gAWRowHeight < bodyHeight) {
+ awCreateDummyItem(body);
+ gAWContentHeight += gAWRowHeight;
+ }
+ }
+}
+
+function awCalcContentHeight()
+{
+ var body = document.getElementById("addressWidgetBody");
+ var kids = body.getElementsByTagName("treerow");
+
+ gAWContentHeight = 0;
+ if (kids.length > 0) {
+ // all rows are forced to a uniform height in xul trees, so
+ // find the first tree row with a boxObject and use it as precedent
+ var i = 0;
+ do {
+ gAWRowHeight = kids[i].boxObject.height;
+ ++i;
+ } while (i < kids.length && !gAWRowHeight);
+ gAWContentHeight = gAWRowHeight*kids.length;
+ }
+}
+
+function awCreateDummyItem(aParent)
+{
+ var titem = document.createElement("treeitem");
+ titem.setAttribute("_isDummyRow", "true");
+
+ var trow = document.createElement("treerow");
+ trow.setAttribute("class", "dummy-row");
+ trow.setAttribute("onclick", "awDummyRow_onclick()");
+ titem.appendChild(trow);
+
+ awCreateDummyCell(trow);
+ awCreateDummyCell(trow);
+
+ if (aParent)
+ aParent.appendChild(titem);
+
+ return titem;
+}
+
+function awCreateDummyCell(aParent)
+{
+ var cell = document.createElement("treecell");
+ cell.setAttribute("class", "treecell-addressingWidget dummy-row-cell");
+ if (aParent)
+ aParent.appendChild(cell);
+
+ return cell;
+}
+
+function awDummyRow_onclick() {
+ // pass click event back to handler
+ awClickEmptySpace(document.getElementById("addressWidgetBody"), true);
+}
+
+function awGetNextDummyRow()
+{
+ // gets the next row from the top down
+ var body = document.getElementById("addressWidgetBody");
+ var kids = body.childNodes;
+ for (var i = 0; i < kids.length; ++i) {
+ if (kids[i].hasAttribute("_isDummyRow"))
+ return kids[i];
+ }
+ return null;
+}
+
+function awSizerListen()
+{
+ // when splitter is clicked, fill in necessary dummy rows each time the mouse is moved
+ awCalcContentHeight(); // precalculate
+ document.addEventListener("mousemove", awSizerMouseMove, true);
+ document.addEventListener("mouseup", awSizerMouseUp, false);
+}
+
+function awSizerMouseMove()
+{
+ awCreateOrRemoveDummyRows();
+}
+
+function awSizerMouseUp()
+{
+ document.removeEventListener("mousemove", awSizerMouseUp, false);
+ document.removeEventListener("mouseup", awSizerMouseUp, false);
+}
+
diff --git a/mailnews/compose/resources/content/messengercompose.xul b/mailnews/compose/resources/content/messengercompose.xul
index daef693bc4a..210b4d2fc9f 100644
--- a/mailnews/compose/resources/content/messengercompose.xul
+++ b/mailnews/compose/resources/content/messengercompose.xul
@@ -515,7 +515,7 @@
-
+
diff --git a/themes/modern/global/globalBindings.xml b/themes/modern/global/globalBindings.xml
index f58fecf2976..e909bb39d9d 100644
--- a/themes/modern/global/globalBindings.xml
+++ b/themes/modern/global/globalBindings.xml
@@ -208,6 +208,16 @@
+
+
diff --git a/themes/modern/global/menulist-compact-arrow.gif b/themes/modern/global/menulist-compact-arrow.gif
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/themes/modern/global/menulist.css b/themes/modern/global/menulist.css
index 6f304470767..71b3e1ba184 100644
--- a/themes/modern/global/menulist.css
+++ b/themes/modern/global/menulist.css
@@ -317,4 +317,39 @@
border: 1px inset #B2BFBF;
}
+/* :::::::::: compact menulists :::::::::: */
+
+.menulist-compact {
+ -moz-binding: url("chrome://global/skin/globalBindings.xml#menulist-compact");
+ margin: 0px;
+ border: 1px solid #000000;
+ min-width: 0px;
+ min-height: 0px;
+ background-color: #D6DFDF;
+ -moz-user-focus: ignore;
+}
+
+.menulist-compact-text {
+ margin-right: 3px;
+}
+
+.menulist-compact-internal-box {
+ border-left: 1px solid #F7F7F7;
+ border-top: 1px solid #F7F7F7;
+ border-right: 1px solid #8CA2A5;
+ border-bottom: 1px solid #8CA2A5;
+ padding: 1px;
+}
+
+.menulist-compact-dropmarker {
+ list-style-image: url("chrome://global/skin/menulist-compact-arrow.gif");
+ margin-left: 2px;
+}
+
+.menulist-compact:hover:active > .menulist-compact-internal-box,
+.menulist-compact[open="true"] > .menulist-compact-internal-box {
+ background-color: #949EA5;
+ border: 1px solid #808080;
+}
+
diff --git a/themes/modern/jar.mn b/themes/modern/jar.mn
index 7f86ee31a74..1c5341f9585 100644
--- a/themes/modern/jar.mn
+++ b/themes/modern/jar.mn
@@ -274,6 +274,7 @@ modern.jar:
skin/modern/global/check-radio-check-pressed.gif (global/check-radio-check-pressed.gif)
skin/modern/global/check-radio-check.gif (global/check-radio-check.gif)
skin/modern/global/menulist-arrow.gif (global/menulist-arrow.gif)
+ skin/modern/global/menulist-compact-arrow.gif (global/menulist-compact-arrow.gif)
skin/modern/global/menulist-dis-arrow.gif (global/menulist-dis-arrow.gif)
skin/modern/global/menulist-left-top.gif (global/menulist-left-top.gif)
skin/modern/global/menulist-left-mid.gif (global/menulist-left-mid.gif)
diff --git a/themes/modern/messenger/messengercompose/messengercompose.css b/themes/modern/messenger/messengercompose/messengercompose.css
index 59376273026..6416cd985ed 100644
--- a/themes/modern/messenger/messengercompose/messengercompose.css
+++ b/themes/modern/messenger/messengercompose/messengercompose.css
@@ -52,39 +52,53 @@ box.padded {
/* addressing widget */
#addressingWidgetTree {
- height : 80px;
width : 0px;
- -moz-user-focus: ignore !important;
+ border: 1px inset #5B7693;
+ -moz-user-focus: none;
}
+#listcol-addressingWidget {
+ width: 9em;
+ border-right: 1px solid #D3D3E5;
+}
+
#addressingWidgetTree > treechildren > treeitem > treerow,
#addressingWidgetTree > treechildren > treeitem[selected="true"] > treerow {
border: none;
- background-color: transparent;
- color: buttontext;
+ background-color: inherit;
+ color: inherit;
}
.treecell-addressingWidget {
vertical-align: middle;
+ padding: 0px;
+ border-bottom: 1px solid #D3D3E5;
}
-tree.addressingWidget > treechildren > treeitem > treerow > treecell > image {
- margin : 0px 3px 0px 0px;
+.treecell-addressingWidget:first-child {
+ border-top: none;
+ border-bottom: none;
+}
+
+.dummy-row-cell:first-child {
+ border-top: none;
+ border-bottom: 1px solid #D3D3E5;
+}
+
+.aw-menulist {
+ margin: 0px;
+ border-top: none;
+ border-left: none;
+ border-color: #314152;
+}
+
+.person-icon {
+ margin : 2px 4px 2px 4px;
border: none;
list-style-image: url("chrome://messenger/skin/addressbook/person.gif");
-moz-user-focus: ignore;
}
-#listcol-addressingWidget {
- width: 110px;
-}
-
-.menulist-compact {
- -moz-user-focus: ignore;
- margin: 3px;
- border: none;
-}
-
/*
menulist.outset
{
diff --git a/xpfe/global/resources/content/treeBindings.xml b/xpfe/global/resources/content/treeBindings.xml
index 2d9ba0f8b61..1342d93e926 100644
--- a/xpfe/global/resources/content/treeBindings.xml
+++ b/xpfe/global/resources/content/treeBindings.xml
@@ -92,10 +92,20 @@
+
+
diff --git a/xpfe/global/resources/content/xul.css b/xpfe/global/resources/content/xul.css
index e99436daef7..66b2d6b52b0 100644
--- a/xpfe/global/resources/content/xul.css
+++ b/xpfe/global/resources/content/xul.css
@@ -305,10 +305,14 @@ treeitem[container="true"] > treerow > .treecell-indent {
-moz-binding: url("chrome://global/content/treeBindings.xml#treecell-image");
}
-.treecell-header {
+.treecell-header, .treecell-inset-header {
-moz-binding: url("chrome://global/content/treeBindings.xml#treecell-header");
}
+.treecell-header-image {
+ -moz-binding: url("chrome://global/content/treeBindings.xml#treecell-header-image");
+}
+
.treecell-align-right {
-moz-binding: url("chrome://global/content/treeBindings.xml#treecell-align-right");
}