Bug 519296, after_pointer popup positioning not offset correctly, r=neil

This commit is contained in:
Neil Deakin 2009-10-06 09:26:34 -04:00
parent d4fdb1eb8a
commit 23335366fc
3 changed files with 12 additions and 6 deletions

View File

@ -489,8 +489,8 @@ nsMenuPopupFrame::InitializePopup(nsIContent* aAnchorContent,
mPopupAlignment = POPUPALIGNMENT_TOPLEFT;
}
else if (position.EqualsLiteral("after_pointer")) {
mPopupAnchor = POPUPALIGNMENT_NONE;
mPopupAlignment = POPUPALIGNMENT_NONE;
mPopupAnchor = POPUPALIGNMENT_TOPLEFT;
mPopupAlignment = POPUPALIGNMENT_TOPLEFT;
// XXXndeakin this is supposed to anchor vertically after, but with the
// horizontal position as the mouse pointer.
mYPos += 21;

View File

@ -303,6 +303,12 @@ function compareEdge(anchor, popup, edge, offsetX, offsetY, testname)
(Math.round(popuprect.bottom) - Math.round(popuprect.top)),
testname + " size");
if (edge == "after_pointer") {
is(Math.round(popuprect.left), Math.round(anchorrect.left) + offsetX, testname + " x position");
is(Math.round(popuprect.top), Math.round(anchorrect.top) + offsetY + 21, testname + " y position");
return;
}
if (edge == "overlap") {
ok(Math.round(anchorrect.left) + offsetY == Math.round(popuprect.left) &&
Math.round(anchorrect.top) + offsetY == Math.round(popuprect.top),

View File

@ -145,7 +145,7 @@ var popupTests = [
events: [ "popupshowing thepopup", "popupshown thepopup" ],
autohide: "thepopup",
steps: ["before_start", "before_end", "after_start", "after_end",
"start_before", "start_after", "end_before", "end_after", "overlap"],
"start_before", "start_after", "end_before", "end_after", "after_pointer", "overlap"],
test: function(testname, step) { gMenuPopup.openPopup(gTrigger, step, 0, 0, false, false); },
result: function(testname, step) { compareEdge(gTrigger, gMenuPopup, step, 0, 0, testname); }
},
@ -155,7 +155,7 @@ var popupTests = [
events: [ "popupshowing thepopup", "popupshown thepopup" ],
autohide: "thepopup",
steps: ["before_start", "before_end", "after_start", "after_end",
"start_before", "start_after", "end_before", "end_after", "overlap"],
"start_before", "start_after", "end_before", "end_after", "after_pointer", "overlap"],
test: function(testname, step) {
gMenuPopup.setAttribute("style", "margin: 10px;");
gMenuPopup.openPopup(gTrigger, step, 0, 0, false, false);
@ -175,7 +175,7 @@ var popupTests = [
events: [ "popupshowing thepopup", "popupshown thepopup" ],
autohide: "thepopup",
steps: ["before_start", "before_end", "after_start", "after_end",
"start_before", "start_after", "end_before", "end_after", "overlap"],
"start_before", "start_after", "end_before", "end_after", "after_pointer", "overlap"],
test: function(testname, step) {
gMenuPopup.setAttribute("style", "margin: -8px;");
gMenuPopup.openPopup(gTrigger, step, 0, 0, false, false);
@ -196,7 +196,7 @@ var popupTests = [
events: [ "popupshowing thepopup", "popupshown thepopup" ],
autohide: "thepopup",
steps: ["before_start", "before_end", "after_start", "after_end",
"start_before", "start_after", "end_before", "end_after", "overlap"],
"start_before", "start_after", "end_before", "end_after", "after_pointer", "overlap"],
test: function(testname, step) {
gMenuPopup.setAttribute("position", step);
gMenuPopup.openPopup(gTrigger, "", 0, 0, false, false);