From e38a4c3e21f3fcefe658216f769dd7b0c6c36383 Mon Sep 17 00:00:00 2001 From: Mikael Grankvist Date: Thu, 4 Sep 2014 15:01:20 +0300 Subject: Override IE disabled style for text field (#14565) Change-Id: Ie48e56666c43450c47015067879fdc604c7ac843 --- .../src/com/vaadin/client/ui/VPopupCalendar.java | 38 +++++++++++++++++++--- .../ui/datefield/PopupDateFieldConnector.java | 2 ++ 2 files changed, 36 insertions(+), 4 deletions(-) (limited to 'client') diff --git a/client/src/com/vaadin/client/ui/VPopupCalendar.java b/client/src/com/vaadin/client/ui/VPopupCalendar.java index 1474ad3b71..577e267d3b 100644 --- a/client/src/com/vaadin/client/ui/VPopupCalendar.java +++ b/client/src/com/vaadin/client/ui/VPopupCalendar.java @@ -240,7 +240,23 @@ public class VPopupCalendar extends VTextualDate implements Field, */ public void setTextFieldEnabled(boolean textFieldEnabled) { this.textFieldEnabled = textFieldEnabled; - text.setEnabled(textFieldEnabled); + // IE has a non input disabled themeing that can not be overridden so we + // must fake the functionality using readonly and unselectable + if (BrowserInfo.get().isIE()) { + if (!textFieldEnabled) { + text.getElement().setAttribute("unselectable", "on"); + text.getElement().setAttribute("readonly", ""); + text.setTabIndex(-2); + } else if (textFieldEnabled + && text.getElement().hasAttribute("unselectable")) { + text.getElement().removeAttribute("unselectable"); + text.getElement().removeAttribute("readonly"); + text.setTabIndex(0); + } + } else { + text.setEnabled(textFieldEnabled); + } + if (textFieldEnabled) { calendarToggle.setTabIndex(-1); Roles.getButtonRole().setAriaHiddenState( @@ -254,6 +270,20 @@ public class VPopupCalendar extends VTextualDate implements Field, handleAriaAttributes(); } + /** + * Set correct tab index for disabled text field in IE as the value set in + * setTextFieldEnabled(...) gets overridden in + * TextualDateConnection.updateFromUIDL(...) + * + * @since + */ + public void setTextFieldTabIndex() { + if (BrowserInfo.get().isIE() && !textFieldEnabled) { + // index needs to be -2 because FocusWidget updates -1 to 0 onAttach + text.setTabIndex(-2); + } + } + @Override public void bindAriaCaption( com.google.gwt.user.client.Element captionElement) { @@ -426,10 +456,10 @@ public class VPopupCalendar extends VTextualDate implements Field, public void onClose(CloseEvent event) { if (event.getSource() == popup) { buildDate(); - if (!BrowserInfo.get().isTouchDevice()) { + if (!BrowserInfo.get().isTouchDevice() && textFieldEnabled) { /* * Move focus to textbox, unless on touch device (avoids opening - * virtual keyboard). + * virtual keyboard) or if textField is disabled. */ focus(); } @@ -494,7 +524,7 @@ public class VPopupCalendar extends VTextualDate implements Field, } // superclass sets the text field independently when building date - text.setEnabled(isEnabled() && isTextFieldEnabled()); + setTextFieldEnabled(isEnabled() && isTextFieldEnabled()); } /** diff --git a/client/src/com/vaadin/client/ui/datefield/PopupDateFieldConnector.java b/client/src/com/vaadin/client/ui/datefield/PopupDateFieldConnector.java index 6f059a7c16..7bcaaba04e 100644 --- a/client/src/com/vaadin/client/ui/datefield/PopupDateFieldConnector.java +++ b/client/src/com/vaadin/client/ui/datefield/PopupDateFieldConnector.java @@ -161,6 +161,8 @@ public class PopupDateFieldConnector extends TextualDateConnector { getWidget().setDescriptionForAssistiveDevices( getState().descriptionForAssistiveDevices); + + getWidget().setTextFieldTabIndex(); } @Override -- cgit v1.2.3