diff options
author | Matti Tahvonen <matti.tahvonen@itmill.com> | 2010-06-17 14:18:51 +0000 |
---|---|---|
committer | Matti Tahvonen <matti.tahvonen@itmill.com> | 2010-06-17 14:18:51 +0000 |
commit | 625286eb36a4f1c83ebaad613e1e4042f20c136b (patch) | |
tree | 85b0fea50b8048243b9f2959ae53cecd3ece6d54 | |
parent | ace454552fdec7bb30726e7a123a9ae106affb7f (diff) | |
download | vaadin-framework-625286eb36a4f1c83ebaad613e1e4042f20c136b.tar.gz vaadin-framework-625286eb36a4f1c83ebaad613e1e4042f20c136b.zip |
Readonly TextFields now have similar special handling as Label and Embedded in Table. The handling is also implemented in a bit different manner and it how works in derived Tables like TreeTable.
svn changeset:13749/svn branch:6.4
-rw-r--r-- | src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java b/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java index 3e48e1fe2c..cf7d012919 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java @@ -3687,8 +3687,8 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler, @Override public void onBrowserEvent(Event event) { if (enabled) { - Element targetTdOrTr = getEventTargetTdOrTr(event); int type = event.getTypeInt(); + Element targetTdOrTr = getEventTargetTdOrTr(event); if (type == Event.ONCONTEXTMENU) { showContextMenu(event); event.stopPropagation(); @@ -3881,22 +3881,29 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler, targetTdOrTr = eventTargetParent; } else { /* - * This is a workaround to make Labels and Embedded in a - * Table clickable (see #2688). It is really not a fix as it - * does not work for a custom component (not extending - * VLabel/VEmbedded) or for read only textfields etc. + * This is a workaround to make Labels, read only TextFields + * and Embedded in a Table clickable (see #2688). It is + * really not a fix as it does not work with a custom read + * only components (not extending VLabel/VEmbedded). */ - Element tdElement = eventTargetParent; - while (DOM.getParent(tdElement) != thisTrElement) { - tdElement = DOM.getParent(tdElement); - } - - Element componentElement = tdElement.getFirstChildElement() - .getFirstChildElement().cast(); - Widget widget = (Widget) client - .getPaintable(componentElement); - if (widget instanceof VLabel || widget instanceof VEmbedded) { - targetTdOrTr = tdElement; + Widget widget = Util.findWidget(eventTarget, null); + if (widget != this) { + while (widget != null && widget.getParent() != this) { + widget = widget.getParent(); + } + if (widget != null) { + // widget is now the closest widget to this row + if (widget instanceof VLabel + || widget instanceof VEmbedded + || (widget instanceof VTextField && ((VTextField) widget) + .isReadOnly())) { + Element tdElement = eventTargetParent; + while (DOM.getParent(tdElement) != thisTrElement) { + tdElement = DOM.getParent(tdElement); + } + targetTdOrTr = tdElement; + } + } } } |