Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJudith Gull2015-05-26 16:45:10 +0000
committerJudith Gull2015-05-27 11:10:09 +0000
commit4768aeb7e78427e6f11ba9d2d36b84c7485e3d2f (patch)
treeae5829a24342580af8373682541517eb71a4fabf
parent18bb94b650df6a237bdd579bed0b87c40905111b (diff)
downloadorg.eclipse.scout.rt-4768aeb7e78427e6f11ba9d2d36b84c7485e3d2f.tar.gz
org.eclipse.scout.rt-4768aeb7e78427e6f11ba9d2d36b84c7485e3d2f.tar.xz
org.eclipse.scout.rt-4768aeb7e78427e6f11ba9d2d36b84c7485e3d2f.zip
Fix: Use mouseup listener to detect node clicks and store item on event
before sending Problem with selection listener: position not correct Problem with mouseup listener: incorrect item found when scrolling Change-Id: I967572cc1f92eec23e1f0489b3c4ef8491935308 Reviewed-on: https://git.eclipse.org/r/48720 Tested-by: Hudson CI Reviewed-by: Judith Gull <jgu@bsiag.com>
-rw-r--r--org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/basic/tree/RwtScoutTree.java25
-rw-r--r--org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/ext/tree/TreeEx.java24
2 files changed, 41 insertions, 8 deletions
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/basic/tree/RwtScoutTree.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/basic/tree/RwtScoutTree.java
index ea0709885f..3ab9f5dc72 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/basic/tree/RwtScoutTree.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/basic/tree/RwtScoutTree.java
@@ -27,7 +27,6 @@ import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeExpansionEvent;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.scout.commons.CollectionUtility;
import org.eclipse.scout.commons.StringUtility;
@@ -69,6 +68,7 @@ import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.TreeItem;
/**
* @since 3.8.0
@@ -109,7 +109,8 @@ public class RwtScoutTree extends RwtScoutComposite<ITree> implements IRwtScoutT
viewer.addDoubleClickListener(new P_RwtDoubleClickListener());
P_RwtTreeListener treeListener = new P_RwtTreeListener();
- viewer.getTree().addListener(SWT.Selection, treeListener);
+ //selection events do not contain correct position of the node
+ viewer.getTree().addListener(SWT.MouseDown, treeListener);
viewer.getTree().addListener(SWT.MouseUp, treeListener);
viewer.getTree().addListener(SWT.MenuDetect, treeListener);
@@ -785,11 +786,10 @@ public class RwtScoutTree extends RwtScoutComposite<ITree> implements IRwtScoutT
@Override
public void handleEvent(Event event) {
switch (event.type) {
- case SWT.Selection: {
- ViewerCell cell = getUiTreeViewer().getCell(new Point(event.x, event.y));
- if (cell != null && cell.getBounds().contains(event.x, event.y) && cell.getElement() instanceof ITreeNode) {
- ITreeNode nodeToClick = (ITreeNode) cell.getElement();
- handleUiNodeClick(nodeToClick, event.button);
+ case SWT.MouseUp: {
+ ITreeNode node = findTreeNode(event);
+ if (node != null) {
+ handleUiNodeClick(node, event.button);
}
break;
}
@@ -804,6 +804,17 @@ public class RwtScoutTree extends RwtScoutComposite<ITree> implements IRwtScoutT
}
}
}
+
+ private ITreeNode findTreeNode(Event event) {
+ if (event.data instanceof TreeItem) {
+ TreeItem item = (TreeItem) event.data;
+ if (item.getData() instanceof ITreeNode) {
+ return (ITreeNode) item.getData();
+ }
+ }
+ //not found
+ return null;
+ }
}
private class P_RwtExpansionListener implements ITreeViewerListener {
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/ext/tree/TreeEx.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/ext/tree/TreeEx.java
index deb137ddd0..601c69cc3b 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/ext/tree/TreeEx.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/ext/tree/TreeEx.java
@@ -33,7 +33,7 @@ public class TreeEx extends Tree {
public TreeEx(Composite parent, int style) {
super(parent, style | SWT.FULL_SELECTION);
- addListener(SWT.MouseDown, new Listener() {
+ addListener(SWT.MouseUp, new Listener() {
private static final long serialVersionUID = 1L;
@Override
@@ -44,6 +44,28 @@ public class TreeEx extends Tree {
}
@Override
+ public void notifyListeners(int eventType, Event event) {
+ //add context item to event before the table may change (e.g. scrolling due to node expansion)
+ if (isClick(event)) {
+ TreeItem contextItem = getItem(new Point(event.x, event.y));
+ Rectangle bounds = contextItem.getBounds();
+
+ //make sure no item is added for expansion events
+ if (event.x >= bounds.x) {
+ if (event.data == null) {
+ event.data = contextItem;
+ }
+ }
+
+ }
+ super.notifyListeners(eventType, event);
+ }
+
+ private boolean isClick(Event event) {
+ return event.type == SWT.MouseDown || event.type == SWT.MouseUp;
+ }
+
+ @Override
protected void checkSubclass() {
// allow subclassing
}

Back to the top