aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatti Tahvonen <matti.tahvonen@itmill.com>2010-06-17 14:18:51 +0000
committerMatti Tahvonen <matti.tahvonen@itmill.com>2010-06-17 14:18:51 +0000
commit625286eb36a4f1c83ebaad613e1e4042f20c136b (patch)
tree85b0fea50b8048243b9f2959ae53cecd3ece6d54
parentace454552fdec7bb30726e7a123a9ae106affb7f (diff)
downloadvaadin-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.java39
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;
+ }
+ }
}
}