From 3b56a28bc754a3dddf1603f3194ce707c1aa1af4 Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Tue, 6 Nov 2007 12:29:21 +0000 Subject: [PATCH] some changes to context menu positioning svn changeset:2721/svn branch:trunk --- .../terminal/gwt/client/ui/ContextMenu.java | 36 +++++++++++++------ .../gwt/public/default/common/common.css | 1 + 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 { -- 2.39.5