summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/vaadin/terminal/gwt/client/ComponentConnector.java8
-rw-r--r--src/com/vaadin/terminal/gwt/client/ServerConnector.java8
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java17
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/AbstractComponentContainerConnector.java22
-rw-r--r--src/com/vaadin/ui/AbstractComponentContainer.java11
5 files changed, 44 insertions, 22 deletions
diff --git a/src/com/vaadin/terminal/gwt/client/ComponentConnector.java b/src/com/vaadin/terminal/gwt/client/ComponentConnector.java
index 34f3f13f03..5f9171084e 100644
--- a/src/com/vaadin/terminal/gwt/client/ComponentConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ComponentConnector.java
@@ -119,4 +119,12 @@ public interface ComponentConnector extends ServerConnector {
*/
public boolean delegateCaptionHandling();
+ /**
+ * Sets the enabled state of the widget associated to this connector.
+ *
+ * @param widgetEnabled
+ * true if the widget should be enabled, false otherwise
+ */
+ public void setWidgetEnabled(boolean widgetEnabled);
+
}
diff --git a/src/com/vaadin/terminal/gwt/client/ServerConnector.java b/src/com/vaadin/terminal/gwt/client/ServerConnector.java
index 559238b512..b331f1f07d 100644
--- a/src/com/vaadin/terminal/gwt/client/ServerConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ServerConnector.java
@@ -46,11 +46,9 @@ public interface ServerConnector extends Connector {
public ApplicationConnection getConnection();
/**
- * Tests whether the connector is enabled or not. Disabled connectors will
- * ignore all attempts at communications. Received messages will be
- * discarded. This method must check that the connector is enabled in
- * context, that is if it's parent is disabled, this method must return
- * false.
+ * Tests whether the connector is enabled or not. This method checks that
+ * the connector is enabled in context, i.e. if the parent connector is
+ * disabled, this method must return false.
*
* @return true if the connector is enabled, false otherwise
*/
diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java
index a56f5f5525..a68875a7d5 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java
@@ -5,8 +5,8 @@ package com.vaadin.terminal.gwt.client.ui;
import java.util.Set;
-import com.google.gwt.user.client.ui.FocusWidget;
import com.google.gwt.user.client.ui.Focusable;
+import com.google.gwt.user.client.ui.HasEnabled;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ComponentConnector;
@@ -93,6 +93,7 @@ public abstract class AbstractComponentConnector extends AbstractConnector
}
+ setWidgetEnabled(isEnabled());
/*
* Disabled state may affect (override) tabindex so the order must be
* first setting tabindex, then enabled state.
@@ -102,11 +103,6 @@ public abstract class AbstractComponentConnector extends AbstractConnector
.getTabIndex());
}
- if (getWidget() instanceof FocusWidget) {
- FocusWidget fw = (FocusWidget) getWidget();
- fw.setEnabled(isEnabled());
- }
-
// Style names
String styleName = getStyleNames(getWidget().getStylePrimaryName());
getWidget().setStyleName(styleName);
@@ -141,6 +137,15 @@ public abstract class AbstractComponentConnector extends AbstractConnector
updateComponentSize();
}
+ public void setWidgetEnabled(boolean widgetEnabled) {
+ if (getWidget() instanceof HasEnabled) {
+ HasEnabled hasEnabled = (HasEnabled) getWidget();
+ if (hasEnabled.isEnabled() != widgetEnabled) {
+ hasEnabled.setEnabled(widgetEnabled);
+ }
+ }
+ }
+
private void updateComponentSize() {
String newWidth = getState().getWidth();
String newHeight = getState().getHeight();
diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentContainerConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentContainerConnector.java
index d6ffc0f091..526631e4b2 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentContainerConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentContainerConnector.java
@@ -23,6 +23,14 @@ public abstract class AbstractComponentContainerConnector extends
private final boolean debugLogging = false;
/**
+ * Temporary storage for last enabled state to be able to see if it has
+ * changed. Can be removed once we are able to listen specifically for
+ * enabled changes in the state. Widget.isEnabled() cannot be used as all
+ * Widgets do not implement HasEnabled
+ */
+ private boolean lastWidgetEnabledState = true;
+
+ /**
* Default constructor
*/
public AbstractComponentContainerConnector() {
@@ -85,4 +93,18 @@ public abstract class AbstractComponentContainerConnector extends
ConnectorHierarchyChangeEvent.TYPE, handler);
}
+ @Override
+ public void setWidgetEnabled(boolean widgetEnabled) {
+ if (lastWidgetEnabledState == widgetEnabled) {
+ return;
+ }
+ lastWidgetEnabledState = widgetEnabled;
+
+ super.setWidgetEnabled(widgetEnabled);
+ for (ComponentConnector c : getChildren()) {
+ // Update children as they might be affected by the enabled state of
+ // their parent
+ c.setWidgetEnabled(c.isEnabled());
+ }
+ }
}
diff --git a/src/com/vaadin/ui/AbstractComponentContainer.java b/src/com/vaadin/ui/AbstractComponentContainer.java
index b597451a57..e3466e90d3 100644
--- a/src/com/vaadin/ui/AbstractComponentContainer.java
+++ b/src/com/vaadin/ui/AbstractComponentContainer.java
@@ -215,17 +215,6 @@ public abstract class AbstractComponentContainer extends AbstractComponent
}
@Override
- public void setEnabled(boolean enabled) {
- super.setEnabled(enabled);
- if (getParent() != null && !getParent().isEnabled()) {
- // some ancestor still disabled, don't update children
- return;
- } else {
- requestRepaintAll();
- }
- }
-
- @Override
public void setVisible(boolean visible) {
if (getState().isVisible() == visible) {
return;