aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/vaadin
diff options
context:
space:
mode:
authorHenri Sara <henri.sara@itmill.com>2010-04-01 11:35:32 +0000
committerHenri Sara <henri.sara@itmill.com>2010-04-01 11:35:32 +0000
commit8d89a2f2536b98df08ae059a34cf6a893b303be5 (patch)
treeca81e760e7dacddc2202c1ff00544a82d31f5ab1 /src/com/vaadin
parent71e76940afd627a5a923fcae29fc6932a8874331 (diff)
downloadvaadin-framework-8d89a2f2536b98df08ae059a34cf6a893b303be5.tar.gz
vaadin-framework-8d89a2f2536b98df08ae059a34cf6a893b303be5.zip
#1394 enable implementing Focusable components outside the com.vaadin.ui package
svn changeset:12274/svn branch:6.3
Diffstat (limited to 'src/com/vaadin')
-rw-r--r--src/com/vaadin/ui/AbstractComponent.java23
-rw-r--r--src/com/vaadin/ui/AbstractField.java21
-rw-r--r--src/com/vaadin/ui/Upload.java30
3 files changed, 31 insertions, 43 deletions
diff --git a/src/com/vaadin/ui/AbstractComponent.java b/src/com/vaadin/ui/AbstractComponent.java
index ebccb41d6c..90eef00604 100644
--- a/src/com/vaadin/ui/AbstractComponent.java
+++ b/src/com/vaadin/ui/AbstractComponent.java
@@ -117,6 +117,11 @@ public abstract class AbstractComponent implements Component, MethodEventSource
private Locale locale;
/**
+ * The component should receive focus (if {@link Focusable}) when attached.
+ */
+ private boolean delayedFocus;
+
+ /**
* List of repaint request listeners or null if not listened at all.
*/
private LinkedList<RepaintRequestListener> repaintRequestListeners = null;
@@ -628,6 +633,9 @@ public abstract class AbstractComponent implements Component, MethodEventSource
*/
public void attach() {
requestRepaint();
+ if (delayedFocus) {
+ focus();
+ }
}
/*
@@ -637,6 +645,21 @@ public abstract class AbstractComponent implements Component, MethodEventSource
public void detach() {
}
+ /**
+ * Sets the focus for this component if the component is {@link Focusable}.
+ */
+ protected void focus() {
+ if (this instanceof Focusable) {
+ final Application app = getApplication();
+ if (app != null) {
+ getWindow().setFocusedComponent((Focusable) this);
+ delayedFocus = false;
+ } else {
+ delayedFocus = true;
+ }
+ }
+ }
+
/*
* Gets the parent application of the component. Don't add a JavaDoc comment
* here, we use the default documentation from implemented interface.
diff --git a/src/com/vaadin/ui/AbstractField.java b/src/com/vaadin/ui/AbstractField.java
index fb436b8ca0..b2b38ffc65 100644
--- a/src/com/vaadin/ui/AbstractField.java
+++ b/src/com/vaadin/ui/AbstractField.java
@@ -13,7 +13,6 @@ import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
-import com.vaadin.Application;
import com.vaadin.data.Buffered;
import com.vaadin.data.Property;
import com.vaadin.data.Validatable;
@@ -59,8 +58,6 @@ public abstract class AbstractField extends AbstractComponent implements Field,
/* Private members */
- private boolean delayedFocus;
-
/**
* Value of the abstract field.
*/
@@ -978,19 +975,12 @@ public abstract class AbstractField extends AbstractComponent implements Field,
}
- /*
- * (non-Javadoc)
- *
- * @see com.vaadin.ui.Component.Focusable#focus()
+ /**
+ * {@inheritDoc}
*/
+ @Override
public void focus() {
- final Application app = getApplication();
- if (app != null) {
- getWindow().setFocusedComponent(this);
- delayedFocus = false;
- } else {
- delayedFocus = true;
- }
+ super.focus();
}
/**
@@ -1069,9 +1059,6 @@ public abstract class AbstractField extends AbstractComponent implements Field,
@Override
public void attach() {
super.attach();
- if (delayedFocus) {
- focus();
- }
if (actionManager != null) {
actionManager.setViewer(getWindow());
}
diff --git a/src/com/vaadin/ui/Upload.java b/src/com/vaadin/ui/Upload.java
index fdad5a75cb..49cf159e0a 100644
--- a/src/com/vaadin/ui/Upload.java
+++ b/src/com/vaadin/ui/Upload.java
@@ -63,8 +63,6 @@ import com.vaadin.terminal.gwt.client.ui.VUpload;
@ClientWidget(VUpload.class)
public class Upload extends AbstractComponent implements Component.Focusable {
- private boolean delayedFocus;
-
/**
* Upload buffer size.
*/
@@ -859,19 +857,12 @@ public class Upload extends AbstractComponent implements Component.Focusable {
this.receiver = receiver;
}
- /*
- * (non-Javadoc)
- *
- * @see com.vaadin.ui.Component.Focusable#focus()
+ /**
+ * {@inheritDoc}
*/
+ @Override
public void focus() {
- final Application app = getApplication();
- if (app != null) {
- getWindow().setFocusedComponent(this);
- delayedFocus = false;
- } else {
- delayedFocus = true;
- }
+ super.focus();
}
/**
@@ -1024,17 +1015,4 @@ public class Upload extends AbstractComponent implements Component.Focusable {
this.buttonCaption = buttonCaption;
}
- /**
- * Notifies the component that it is connected to an application.
- *
- * @see com.vaadin.ui.Component#attach()
- */
- @Override
- public void attach() {
- super.attach();
- if (delayedFocus) {
- focus();
- }
- }
-
}