}
/**
- * Shows context menu at given location.
+ * Shows context menu at given location IF it contain at least one item.
*
* @param left
* @param top
*/
public void showAt(int left, int top) {
+ final Action[] actions = actionOwner.getActions();
+ if (actions == null || actions.length == 0) {
+ // Only show if there really are actions
+ return;
+ }
this.left = left;
this.top = top;
menu.clearItems();
- final Action[] actions = actionOwner.getActions();
for (int i = 0; i < actions.length; i++) {
final Action a = actions[i];
menu.addItem(new MenuItem(a.getHTML(), true, a));
<td></td>\r
<td>contextmenu-noicon</td>\r
</tr>\r
-\r
+<!--Empty context menu-->\r
+<tr>\r
+ <td>mouseClick</td>\r
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>\r
+ <td>25,8</td>\r
+</tr>\r
+<tr>\r
+ <td>mouseClick</td>\r
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>\r
+ <td>72,8</td>\r
+</tr>\r
+<tr>\r
+ <td>mouseClick</td>\r
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>\r
+ <td>77,2</td>\r
+</tr>\r
+<tr>\r
+ <td>mouseClick</td>\r
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>\r
+ <td>48,5</td>\r
+</tr>\r
+<tr>\r
+ <td>contextmenu</td>\r
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[3]/domChild[3]/domChild[0]</td>\r
+ <td></td>\r
+</tr>\r
+<tr>\r
+ <td>screenCapture</td>\r
+ <td></td>\r
+ <td>contextmenu-empty</td>\r
+</tr>\r
</tbody></table>\r
</body>\r
</html>\r
options.put("With and without icon", cm);\r
options.put("Only one large icon", new ContextMenu("Icon",\r
ICON_64_EMAIL_REPLY_PNG_UNCACHEABLE));\r
+ options.put("Empty", new ContextMenu() {\r
+ @Override\r
+ public Action[] getActions() {\r
+ return null;\r
+ }\r
+ });\r
\r
createSelectAction("Context menu", category, options, "None",\r
contextMenuCommand, true);\r