aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatti Tahvonen <matti.tahvonen@itmill.com>2007-11-06 12:29:21 +0000
committerMatti Tahvonen <matti.tahvonen@itmill.com>2007-11-06 12:29:21 +0000
commit3b56a28bc754a3dddf1603f3194ce707c1aa1af4 (patch)
tree3cf4a1ca629dc269271ccd3872e24be3209a60ce
parentcbe93eb41534fe20040bf4dc8224721b2d5f72af (diff)
downloadvaadin-framework-3b56a28bc754a3dddf1603f3194ce707c1aa1af4.tar.gz
vaadin-framework-3b56a28bc754a3dddf1603f3194ce707c1aa1af4.zip
some changes to context menu positioning
svn changeset:2721/svn branch:trunk
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/client/ui/ContextMenu.java36
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/public/default/common/common.css1
2 files changed, 27 insertions, 10 deletions
diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/ContextMenu.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/ContextMenu.java
index 82bbfadffc..f488e9441b 100644
--- a/src/com/itmill/toolkit/terminal/gwt/client/ui/ContextMenu.java
+++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/ContextMenu.java
@@ -1,6 +1,5 @@
package com.itmill.toolkit.terminal.gwt.client.ui;
-import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.MenuBar;
import com.google.gwt.user.client.ui.MenuItem;
@@ -12,6 +11,10 @@ public class ContextMenu extends PopupPanel {
private CMenuBar menu = new CMenuBar();
+ private int left;
+
+ private int top;
+
/**
* This method should be used only by Client object as only one per client
* should exists. Request an instance via client.getContextMenu();
@@ -41,6 +44,8 @@ public class ContextMenu extends PopupPanel {
* @param top
*/
public void showAt(int left, int top) {
+ this.left = left;
+ this.top = top;
menu.clearItems();
Action[] actions = actionOwner.getActions();
for (int i = 0; i < actions.length; i++) {
@@ -48,15 +53,26 @@ public class ContextMenu extends PopupPanel {
menu.addItem(new MenuItem(a.getHTML(), true, a));
}
- setPopupPosition(left, top);
- show();
- // fix position if "outside" screen
- if (DOM.getElementPropertyInt(getElement(), "offsetWidth") + left > Window
- .getClientWidth()) {
- left = Window.getClientWidth()
- - DOM.getElementPropertyInt(getElement(), "offsetWidth");
- setPopupPosition(left, top);
- }
+ this.setPopupPositionAndShow(new PositionCallback() {
+ public void setPosition(int offsetWidth, int offsetHeight) {
+ // mac FF gets bad width due GWT popups overflow hacks,
+ // re-determine width
+ offsetWidth = menu.getOffsetWidth();
+ int left = ContextMenu.this.left;
+ int top = ContextMenu.this.top;
+ if (offsetWidth + left > Window.getClientWidth()) {
+ left = left - offsetWidth;
+ if (left < 0)
+ left = 0;
+ }
+ if (offsetHeight + top > Window.getClientHeight()) {
+ top = top - offsetHeight;
+ if (top < 0)
+ top = 0;
+ }
+ setPopupPosition(left, top);
+ }
+ });
}
public void showAt(ActionOwner ao, int left, int top) {
diff --git a/src/com/itmill/toolkit/terminal/gwt/public/default/common/common.css b/src/com/itmill/toolkit/terminal/gwt/public/default/common/common.css
index 239549ecc8..274164d0cf 100644
--- a/src/com/itmill/toolkit/terminal/gwt/public/default/common/common.css
+++ b/src/com/itmill/toolkit/terminal/gwt/public/default/common/common.css
@@ -65,6 +65,7 @@
padding: 2px 20px 2px 5px;
cursor: pointer;
vertical-align: middle;
+ white-space: nowrap;
}
.i-contextmenu .gwt-MenuItem-selected {