summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client/src/main/java/com/vaadin/client/WidgetUtil.java22
-rw-r--r--client/src/main/java/com/vaadin/client/ui/VAbstractTextualDate.java3
-rw-r--r--client/src/main/java/com/vaadin/client/ui/VComboBox.java22
-rw-r--r--compatibility-client/src/main/java/com/vaadin/v7/client/ui/VFilterSelect.java19
-rw-r--r--compatibility-client/src/main/java/com/vaadin/v7/client/ui/VScrollTable.java11
-rw-r--r--compatibility-client/src/main/java/com/vaadin/v7/client/ui/VTextualDate.java3
-rw-r--r--compatibility-server/src/main/java/com/vaadin/v7/ui/ComboBox.java4
-rw-r--r--compatibility-server/src/main/java/com/vaadin/v7/ui/Grid.java2
-rw-r--r--compatibility-server/src/main/java/com/vaadin/v7/ui/Table.java36
-rw-r--r--compatibility-themes/src/main/themes/VAADIN/themes/base/table/table.scss1
-rw-r--r--themes/src/main/themes/VAADIN/themes/valo/components/_table.scss1
-rwxr-xr-xuitest/reference-screenshots/chrome/AccordionClipsContentTest-testAccordionClipsContent_ANY_Chrome__button-clicked.pngbin18832 -> 18463 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__buttons.pngbin38135 -> 38068 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__labels.pngbin33069 -> 33057 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-error.pngbin33011 -> 33123 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-tray.pngbin32572 -> 32683 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-warning.pngbin33025 -> 33135 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fifth-open.pngbin53964 -> 54121 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-first-open.pngbin47148 -> 47347 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fourth-open.pngbin52833 -> 52965 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-second-open.pngbin50457 -> 50701 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-third-open.pngbin53626 -> 53773 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects.pngbin46089 -> 46263 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__textfields.pngbin34120 -> 33602 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fifth-open.pngbin49227 -> 49424 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-first-open.pngbin43677 -> 43758 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fourth-open.pngbin49121 -> 49247 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-second-open.pngbin47920 -> 47994 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-third-open.pngbin49665 -> 49731 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects.pngbin42775 -> 42604 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__textfields.pngbin30889 -> 30084 bytes
-rw-r--r--uitest/reference-screenshots/chrome/CheckboxAlignmentWithNoHeaderGridTest-alignments_are_correct_ANY_Chrome__alignment.pngbin20652 -> 20251 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ComboBoxBorderTest-testComboBoxArrow_ANY_Chrome__arrow.pngbin13105 -> 13103 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page1.pngbin41781 -> 41610 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page2.pngbin50883 -> 50807 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-selected-1-3-5-9.pngbin33464 -> 33256 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-32x32-page2.pngbin57486 -> 57327 bytes
-rw-r--r--uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-64x64-page1-highlight-first.pngbin54944 -> 54771 bytes
-rw-r--r--uitest/reference-screenshots/chrome/FontIconsTest-checkScreenshot_ANY_Chrome__allVaadinIcons.pngbin141692 -> 141280 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-a.pngbin45969 -> 45941 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-b.pngbin45981 -> 45924 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-c.pngbin46078 -> 46005 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col3.pngbin35288 -> 35232 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__initial.pngbin45981 -> 45920 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__no-footer.pngbin44923 -> 44875 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridEditorFrozenColumnsUITest-testEditorWithFrozenColumns_ANY_Chrome__noscroll.pngbin48245 -> 50365 bytes
-rw-r--r--uitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled.pngbin84488 -> 83717 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.pngbin84481 -> 83719 bytes
-rw-r--r--uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled-End.pngbin29637 -> 29315 bytes
-rw-r--r--uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled-Middle.pngbin35678 -> 35719 bytes
-rw-r--r--uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-died-at-age.pngbin39820 -> 39743 bytes
-rw-r--r--uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-name.pngbin39824 -> 39756 bytes
-rw-r--r--uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-died-at-age.pngbin39829 -> 39763 bytes
-rw-r--r--uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-name.pngbin39832 -> 39765 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar-second.pngbin48580 -> 49162 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar.pngbin48598 -> 48943 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__300px-scrolled-right.pngbin35916 -> 36450 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerHidden.pngbin12017 -> 11946 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible.pngbin13077 -> 13008 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible2.pngbin13075 -> 13027 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/LabelModesTest-testLabelModes_ANY_Chrome__labelmodes.pngbin24698 -> 24723 bytes
-rw-r--r--uitest/reference-screenshots/chrome/LabelTooltipTest-testLabelToolTipChameleonTheme_ANY_Chrome__tooltipVisible.pngbin24461 -> 24538 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ReindeerThemeTest-testTheme_ANY_Chrome__textfields.pngbin33597 -> 33140 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fifth-open.pngbin52099 -> 52039 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-first-open.pngbin46424 -> 46553 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fourth-open.pngbin52507 -> 52425 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-second-open.pngbin49226 -> 49311 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-third-open.pngbin52312 -> 52354 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects.pngbin45777 -> 45747 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__textfields.pngbin33783 -> 33167 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/UndefinedSizeScrollbarsTest-testNoScrollbars_ANY_Chrome__noscrollbars.pngbin9231 -> 9171 bytes
-rw-r--r--uitest/reference-screenshots/chrome/VLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled.pngbin42124 -> 41341 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ValoThemeUITest-selects_ANY_Chrome__selects.pngbin81059 -> 80432 bytes
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxReadOnlyPopup.java45
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/table/CtrlShiftMultiselect.java3
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/table/CtrlShiftMultiselectTouchDetectionDisabled.java41
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/table/TableScrollsOnRefresh.java86
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/treetable/TreeTableMultiselect.java64
-rw-r--r--uitest/src/main/java/com/vaadin/v7/tests/components/combobox/ComboboxPageLengthZeroFilter.java89
-rw-r--r--uitest/src/test/java/com/vaadin/tests/VerifyBrowserVersionTest.java2
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxReadOnlyPopupTest.java26
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/table/CtrlShiftMultiselectTouchDetectionDisabledTest.java40
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/table/TableScrollsOnRefreshTest.java48
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/treetable/TreeTableMultiselectTest.java38
-rw-r--r--uitest/src/test/java/com/vaadin/v7/tests/components/combobox/ComboboxPageLengthZeroFilterTest.java28
85 files changed, 593 insertions, 41 deletions
diff --git a/client/src/main/java/com/vaadin/client/WidgetUtil.java b/client/src/main/java/com/vaadin/client/WidgetUtil.java
index 6906f5fa5e..7a268a0a8a 100644
--- a/client/src/main/java/com/vaadin/client/WidgetUtil.java
+++ b/client/src/main/java/com/vaadin/client/WidgetUtil.java
@@ -42,6 +42,7 @@ import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.EventListener;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.shared.ui.ErrorLevel;
import com.vaadin.shared.util.SharedUtil;
@@ -1962,4 +1963,25 @@ public class WidgetUtil {
return indicator;
}
}
+
+ public static void disableBrowserAutocomplete(TextBox textBox) {
+ /*-
+ * Stop the browser from showing its own suggestion popup.
+ *
+ * Using an invalid value instead of "off" as suggested by
+ * https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
+ *
+ * Leaving the non-standard Safari options autocapitalize and
+ * autocorrect untouched since those do not interfere in the same
+ * way, and they might be useful in a combo box where new items are
+ * allowed.
+ */
+ if (BrowserInfo.get().isChrome()) {
+ // Chrome supports "off" and random number does not work with
+ // Chrome
+ textBox.getElement().setAttribute("autocomplete", "off");
+ } else {
+ textBox.getElement().setAttribute("autocomplete", Math.random() + "");
+ }
+ }
}
diff --git a/client/src/main/java/com/vaadin/client/ui/VAbstractTextualDate.java b/client/src/main/java/com/vaadin/client/ui/VAbstractTextualDate.java
index bf79fec545..5fd4fe6c55 100644
--- a/client/src/main/java/com/vaadin/client/ui/VAbstractTextualDate.java
+++ b/client/src/main/java/com/vaadin/client/ui/VAbstractTextualDate.java
@@ -36,6 +36,7 @@ import com.vaadin.client.BrowserInfo;
import com.vaadin.client.Focusable;
import com.vaadin.client.LocaleNotLoadedException;
import com.vaadin.client.LocaleService;
+import com.vaadin.client.WidgetUtil;
import com.vaadin.client.ui.aria.AriaHelper;
import com.vaadin.client.ui.aria.HandlesAriaCaption;
import com.vaadin.client.ui.aria.HandlesAriaInvalid;
@@ -90,6 +91,8 @@ public abstract class VAbstractTextualDate<R extends Enum<R>>
if (BrowserInfo.get().isIE()) {
addDomHandler(this, KeyDownEvent.getType());
}
+ // Stop the browser from showing its own suggestion popup.
+ WidgetUtil.disableBrowserAutocomplete(text);
add(text);
publishJSHelpers(getElement());
}
diff --git a/client/src/main/java/com/vaadin/client/ui/VComboBox.java b/client/src/main/java/com/vaadin/client/ui/VComboBox.java
index cf06e06b2d..6ff2f31a9a 100644
--- a/client/src/main/java/com/vaadin/client/ui/VComboBox.java
+++ b/client/src/main/java/com/vaadin/client/ui/VComboBox.java
@@ -1438,24 +1438,7 @@ public class VComboBox extends Composite implements Field, KeyDownHandler,
* @since 7.6.4
*/
public FilterSelectTextBox() {
- /*-
- * Stop the browser from showing its own suggestion popup.
- *
- * Using an invalid value instead of "off" as suggested by
- * https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
- *
- * Leaving the non-standard Safari options autocapitalize and
- * autocorrect untouched since those do not interfere in the same
- * way, and they might be useful in a combo box where new items are
- * allowed.
- */
- if (BrowserInfo.get().isChrome()) {
- // Chrome supports "off" and random number does not work with
- // Chrome
- getElement().setAttribute("autocomplete", "off");
- } else {
- getElement().setAttribute("autocomplete", Math.random() + "");
- }
+ WidgetUtil.disableBrowserAutocomplete(this);
}
/**
@@ -2045,6 +2028,9 @@ public class VComboBox extends Composite implements Field, KeyDownHandler,
/** For internal use only. May be removed or replaced in the future. */
public void updateReadOnly() {
+ if (readonly) {
+ suggestionPopup.hide();
+ }
debug("VComboBox: updateReadOnly()");
tb.setReadOnly(readonly || !textInputEnabled);
}
diff --git a/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VFilterSelect.java b/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VFilterSelect.java
index 86fa8ed500..d7ae6f3c07 100644
--- a/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VFilterSelect.java
+++ b/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VFilterSelect.java
@@ -1409,23 +1409,8 @@ public class VFilterSelect extends Composite
* @since 7.6.4
*/
public FilterSelectTextBox() {
- /*-
- * Stop the browser from showing its own suggestion popup.
- *
- * Using an invalid value instead of "off" as suggested by
- * https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
- *
- * Leaving the non-standard Safari options autocapitalize and
- * autocorrect untouched since those do not interfere in the same
- * way, and they might be useful in a combo box where new items are
- * allowed.
- */
- if (BrowserInfo.get().isChrome()) {
- // Chrome supports "off" and random number does not work with Chrome
- getElement().setAttribute("autocomplete", "off");
- } else {
- getElement().setAttribute("autocomplete", Math.random() + "");
- }
+ // Stop the browser from showing its own suggestion popup.
+ WidgetUtil.disableBrowserAutocomplete(this);
}
/**
diff --git a/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VScrollTable.java b/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VScrollTable.java
index 4b0a52c1bd..c4294009d2 100644
--- a/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VScrollTable.java
+++ b/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VScrollTable.java
@@ -349,6 +349,8 @@ public class VScrollTable extends FlowPanel
private SelectMode selectMode = SelectMode.NONE;
+ private boolean multiSelectTouchDetectionEnabled = true;
+
public final HashSet<String> selectedRowKeys = new HashSet<String>();
/*
@@ -1502,6 +1504,10 @@ public class VScrollTable extends FlowPanel
} else {
selectMode = SelectMode.NONE;
}
+ if (uidl.hasAttribute("touchdetection")) {
+ multiSelectTouchDetectionEnabled = uidl
+ .getBooleanAttribute("touchdetection");
+ }
}
}
@@ -1951,9 +1957,10 @@ public class VScrollTable extends FlowPanel
}
private void setMultiSelectMode(int multiselectmode) {
- if (BrowserInfo.get().isTouchDevice()) {
+ if (BrowserInfo.get().isTouchDevice()
+ && multiSelectTouchDetectionEnabled) {
// Always use the simple mode for touch devices that do not have
- // shift/ctrl keys
+ // shift/ctrl keys (unless this feature is explicitly disabled)
this.multiselectmode = MULTISELECT_MODE_SIMPLE;
} else {
this.multiselectmode = multiselectmode;
diff --git a/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VTextualDate.java b/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VTextualDate.java
index 4d52e3e4f8..e332e628fd 100644
--- a/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VTextualDate.java
+++ b/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VTextualDate.java
@@ -35,6 +35,7 @@ import com.vaadin.client.BrowserInfo;
import com.vaadin.client.Focusable;
import com.vaadin.client.LocaleNotLoadedException;
import com.vaadin.client.LocaleService;
+import com.vaadin.client.WidgetUtil;
import com.vaadin.client.ui.SubPartAware;
import com.vaadin.client.ui.aria.AriaHelper;
import com.vaadin.client.ui.aria.HandlesAriaCaption;
@@ -115,6 +116,8 @@ public class VTextualDate extends VDateField
if (BrowserInfo.get().isIE()) {
addDomHandler(this, KeyDownEvent.getType());
}
+ // Stop the browser from showing its own suggestion popup.
+ WidgetUtil.disableBrowserAutocomplete(text);
add(text);
}
diff --git a/compatibility-server/src/main/java/com/vaadin/v7/ui/ComboBox.java b/compatibility-server/src/main/java/com/vaadin/v7/ui/ComboBox.java
index aaccdb8b25..f502aedd8e 100644
--- a/compatibility-server/src/main/java/com/vaadin/v7/ui/ComboBox.java
+++ b/compatibility-server/src/main/java/com/vaadin/v7/ui/ComboBox.java
@@ -620,7 +620,9 @@ public class ComboBox extends AbstractSelect
// page length usable for non-null items
int effectivePageLength = pageLength
- (needNullSelectOption && (currentPage == 0) ? 1 : 0);
- return Math.min(size - 1, first + effectivePageLength - 1);
+ // zero pageLength implies infinite page size
+ return pageLength == 0 ? size - 1
+ : Math.min(size - 1, first + effectivePageLength - 1);
}
/**
diff --git a/compatibility-server/src/main/java/com/vaadin/v7/ui/Grid.java b/compatibility-server/src/main/java/com/vaadin/v7/ui/Grid.java
index 20f7acb074..f67bbb4c3e 100644
--- a/compatibility-server/src/main/java/com/vaadin/v7/ui/Grid.java
+++ b/compatibility-server/src/main/java/com/vaadin/v7/ui/Grid.java
@@ -38,6 +38,7 @@ import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.jsoup.Jsoup;
import org.jsoup.nodes.Attributes;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
@@ -3473,6 +3474,7 @@ public class Grid extends AbstractComponent
if (caption == null) {
caption = ""; // Render null as empty
}
+ caption = Jsoup.parse(caption).text();
state.headerCaption = caption;
HeaderRow row = grid.getHeader().getDefaultRow();
diff --git a/compatibility-server/src/main/java/com/vaadin/v7/ui/Table.java b/compatibility-server/src/main/java/com/vaadin/v7/ui/Table.java
index 433254aa67..0519e20f75 100644
--- a/compatibility-server/src/main/java/com/vaadin/v7/ui/Table.java
+++ b/compatibility-server/src/main/java/com/vaadin/v7/ui/Table.java
@@ -588,6 +588,8 @@ public class Table extends AbstractSelect implements Action.Container,
private MultiSelectMode multiSelectMode = MultiSelectMode.DEFAULT;
+ private boolean multiSelectTouchDetectionEnabled = true;
+
private boolean rowCacheInvalidated;
private RowGenerator rowGenerator = null;
@@ -3775,6 +3777,10 @@ public class Table extends AbstractSelect implements Action.Container,
if (isSelectable()) {
target.addAttribute("selectmode",
(isMultiSelect() ? "multi" : "single"));
+ if (isMultiSelect()) {
+ target.addAttribute("touchdetection",
+ isMultiSelectTouchDetectionEnabled());
+ }
} else {
target.addAttribute("selectmode", "none");
}
@@ -5188,7 +5194,10 @@ public class Table extends AbstractSelect implements Action.Container,
* <p>
* Note, that on some clients the mode may not be respected. E.g. on touch
* based devices CTRL/SHIFT base selection method is invalid, so touch based
- * browsers always use the {@link MultiSelectMode#SIMPLE}.
+ * browsers always use the {@link MultiSelectMode#SIMPLE} unless touch multi
+ * select is explicitly disabled.
+ *
+ * @see #setMultiSelectTouchDetectionEnabled(boolean)
*
* @param mode
* The select mode of the table
@@ -5208,6 +5217,31 @@ public class Table extends AbstractSelect implements Action.Container,
}
/**
+ * Default behavior on touch-reporting devices is to switch from CTRL/SHIFT
+ * based multi-selection to simple mode, but you can use this method to
+ * explicitly disable the touch device detection. Thus you can keep using
+ * keyboard-based multi selection on hybrid devices that have both a touch
+ * screen and a keyboard.
+ *
+ * @param multiSelectTouchDetectionEnabled
+ * Whether to enable or disable touch screen detection
+ */
+ public void setMultiSelectTouchDetectionEnabled(
+ boolean multiSelectTouchDetectionEnabled) {
+ this.multiSelectTouchDetectionEnabled = multiSelectTouchDetectionEnabled;
+ markAsDirty();
+ }
+
+ /**
+ * Returns if touch screen detection is used to toggle multi select mode.
+ *
+ * @return If touch screen detection for multi select is enabled
+ */
+ public boolean isMultiSelectTouchDetectionEnabled() {
+ return multiSelectTouchDetectionEnabled;
+ }
+
+ /**
* Lazy loading accept criterion for Table. Accepted target rows are loaded
* from server once per drag and drop operation. Developer must override one
* method that decides on which rows the currently dragged data can be
diff --git a/compatibility-themes/src/main/themes/VAADIN/themes/base/table/table.scss b/compatibility-themes/src/main/themes/VAADIN/themes/base/table/table.scss
index 22ffdffa4d..64f700c882 100644
--- a/compatibility-themes/src/main/themes/VAADIN/themes/base/table/table.scss
+++ b/compatibility-themes/src/main/themes/VAADIN/themes/base/table/table.scss
@@ -137,6 +137,7 @@
}
.#{$primaryStyleName}-body {
border: 1px solid #aaa;
+ overflow-anchor: none; /* In Chrome 56+ */
}
.#{$primaryStyleName}-row-spacer {
height: 10px;
diff --git a/themes/src/main/themes/VAADIN/themes/valo/components/_table.scss b/themes/src/main/themes/VAADIN/themes/valo/components/_table.scss
index 4a88c925ff..8443438fe2 100644
--- a/themes/src/main/themes/VAADIN/themes/valo/components/_table.scss
+++ b/themes/src/main/themes/VAADIN/themes/valo/components/_table.scss
@@ -268,6 +268,7 @@ $v-table-background-color: null !default;
.#{$primary-stylename}-body {
border: $v-table-border-width solid $border-color;
+ overflow-anchor: none; /* In Chrome 56+ */
@include user-select(text);
}
diff --git a/uitest/reference-screenshots/chrome/AccordionClipsContentTest-testAccordionClipsContent_ANY_Chrome__button-clicked.png b/uitest/reference-screenshots/chrome/AccordionClipsContentTest-testAccordionClipsContent_ANY_Chrome__button-clicked.png
index 05b7c48ff3..9071cf2cee 100755
--- a/uitest/reference-screenshots/chrome/AccordionClipsContentTest-testAccordionClipsContent_ANY_Chrome__button-clicked.png
+++ b/uitest/reference-screenshots/chrome/AccordionClipsContentTest-testAccordionClipsContent_ANY_Chrome__button-clicked.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__buttons.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__buttons.png
index 7c1db88863..c712034964 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__buttons.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__buttons.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__labels.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__labels.png
index 0057b8d371..edc504c48b 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__labels.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__labels.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-error.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-error.png
index 58dfe49490..70fced7498 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-error.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-error.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-tray.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-tray.png
index db15839709..b4c5bfc067 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-tray.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-tray.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-warning.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-warning.png
index 86e761b4bb..75b3a539b2 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-warning.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-warning.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png
index 9698b516f2..d6200f5b2c 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-first-open.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-first-open.png
index 03060ea2e1..4d37594740 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-first-open.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-first-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png
index 39d648b127..3ddb5309e5 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-second-open.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-second-open.png
index 93e14d700b..2e89c0cf4a 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-second-open.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-second-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-third-open.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-third-open.png
index 41333a42e9..4c835505c4 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-third-open.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-third-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects.png
index 0db6a37972..aefe41b047 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__textfields.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__textfields.png
index 1f9a3b273a..f227275a46 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__textfields.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__textfields.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png
index 3bc55a147d..7356b901dd 100755
--- a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png
+++ b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-first-open.png b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-first-open.png
index c98e6eca78..b2c29c44b6 100755
--- a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-first-open.png
+++ b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-first-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png
index 0513a008d3..4fcda7bff1 100755
--- a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png
+++ b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-second-open.png b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-second-open.png
index bb346392f4..c91c7410c2 100755
--- a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-second-open.png
+++ b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-second-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-third-open.png b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-third-open.png
index ff20628931..57c81e0c24 100755
--- a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-third-open.png
+++ b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-third-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects.png b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects.png
index a2795ecab6..83c62202e9 100755
--- a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects.png
+++ b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__textfields.png b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__textfields.png
index 9b0589bdff..8d4c299379 100755
--- a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__textfields.png
+++ b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__textfields.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/CheckboxAlignmentWithNoHeaderGridTest-alignments_are_correct_ANY_Chrome__alignment.png b/uitest/reference-screenshots/chrome/CheckboxAlignmentWithNoHeaderGridTest-alignments_are_correct_ANY_Chrome__alignment.png
index 81c821bffd..a36be531d5 100644
--- a/uitest/reference-screenshots/chrome/CheckboxAlignmentWithNoHeaderGridTest-alignments_are_correct_ANY_Chrome__alignment.png
+++ b/uitest/reference-screenshots/chrome/CheckboxAlignmentWithNoHeaderGridTest-alignments_are_correct_ANY_Chrome__alignment.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ComboBoxBorderTest-testComboBoxArrow_ANY_Chrome__arrow.png b/uitest/reference-screenshots/chrome/ComboBoxBorderTest-testComboBoxArrow_ANY_Chrome__arrow.png
index 8bddc121fc..2f70a50572 100755
--- a/uitest/reference-screenshots/chrome/ComboBoxBorderTest-testComboBoxArrow_ANY_Chrome__arrow.png
+++ b/uitest/reference-screenshots/chrome/ComboBoxBorderTest-testComboBoxArrow_ANY_Chrome__arrow.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page1.png b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page1.png
index fc968d10c2..6b3ab39a66 100755
--- a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page1.png
+++ b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page1.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page2.png b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page2.png
index 4e07d0707b..ab1416563a 100755
--- a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page2.png
+++ b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page2.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-selected-1-3-5-9.png b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-selected-1-3-5-9.png
index bcf031d19f..1e01d508fa 100755
--- a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-selected-1-3-5-9.png
+++ b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-selected-1-3-5-9.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-32x32-page2.png b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-32x32-page2.png
index d17d4910f2..2d8d4e9aac 100755
--- a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-32x32-page2.png
+++ b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-32x32-page2.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-64x64-page1-highlight-first.png b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-64x64-page1-highlight-first.png
index 5f586d9d7b..5f4e15bc2e 100644
--- a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-64x64-page1-highlight-first.png
+++ b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-64x64-page1-highlight-first.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/FontIconsTest-checkScreenshot_ANY_Chrome__allVaadinIcons.png b/uitest/reference-screenshots/chrome/FontIconsTest-checkScreenshot_ANY_Chrome__allVaadinIcons.png
index 895b5fabbd..6b961a0cc4 100644
--- a/uitest/reference-screenshots/chrome/FontIconsTest-checkScreenshot_ANY_Chrome__allVaadinIcons.png
+++ b/uitest/reference-screenshots/chrome/FontIconsTest-checkScreenshot_ANY_Chrome__allVaadinIcons.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-a.png b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-a.png
index 081e0f8183..72ebb93d57 100755
--- a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-a.png
+++ b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-a.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-b.png b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-b.png
index 40cce20756..34f85f9fa6 100755
--- a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-b.png
+++ b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-b.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-c.png b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-c.png
index ba19d6e47e..e2a35ad1fe 100755
--- a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-c.png
+++ b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-c.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col3.png b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col3.png
index 50fa639031..15fa969884 100755
--- a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col3.png
+++ b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col3.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__initial.png b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__initial.png
index 40cce20756..97791471f7 100755
--- a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__initial.png
+++ b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__no-footer.png b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__no-footer.png
index cba14e19de..199b2eb7e0 100755
--- a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__no-footer.png
+++ b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__no-footer.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridEditorFrozenColumnsUITest-testEditorWithFrozenColumns_ANY_Chrome__noscroll.png b/uitest/reference-screenshots/chrome/GridEditorFrozenColumnsUITest-testEditorWithFrozenColumns_ANY_Chrome__noscroll.png
index 14916407c2..d88da45c36 100755
--- a/uitest/reference-screenshots/chrome/GridEditorFrozenColumnsUITest-testEditorWithFrozenColumns_ANY_Chrome__noscroll.png
+++ b/uitest/reference-screenshots/chrome/GridEditorFrozenColumnsUITest-testEditorWithFrozenColumns_ANY_Chrome__noscroll.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled.png b/uitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled.png
index 104d8574cd..fe5f261b93 100644
--- a/uitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled.png
+++ b/uitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.png b/uitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.png
index ac9ef84428..8fddf7b3a6 100755
--- a/uitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.png
+++ b/uitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled-End.png b/uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled-End.png
index a4e20af724..c84a5ce01f 100644
--- a/uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled-End.png
+++ b/uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled-End.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled-Middle.png b/uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled-Middle.png
index 1ea31dc9a4..0a03df9b48 100644
--- a/uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled-Middle.png
+++ b/uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled-Middle.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-died-at-age.png b/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-died-at-age.png
index 87dc378e38..ca542ef976 100644
--- a/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-died-at-age.png
+++ b/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-died-at-age.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-name.png b/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-name.png
index de74d61399..84ac4d7688 100644
--- a/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-name.png
+++ b/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-name.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-died-at-age.png b/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-died-at-age.png
index ee77ba1e43..9354254c53 100644
--- a/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-died-at-age.png
+++ b/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-died-at-age.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-name.png b/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-name.png
index 93996dad24..98d174ee5e 100644
--- a/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-name.png
+++ b/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-name.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar-second.png b/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar-second.png
index ac6464c14a..8cbe62218f 100755
--- a/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar-second.png
+++ b/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar-second.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar.png b/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar.png
index a789f116da..ddca369580 100755
--- a/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar.png
+++ b/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__300px-scrolled-right.png b/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__300px-scrolled-right.png
index 32cc4cd547..e63c64354c 100755
--- a/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__300px-scrolled-right.png
+++ b/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__300px-scrolled-right.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerHidden.png b/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerHidden.png
index 4bbb4c8f1b..3b98c20569 100755
--- a/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerHidden.png
+++ b/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerHidden.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible.png b/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible.png
index e306f14390..ce817daf84 100755
--- a/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible.png
+++ b/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible2.png b/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible2.png
index aa62249dc4..9b1ebcebab 100755
--- a/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible2.png
+++ b/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible2.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/LabelModesTest-testLabelModes_ANY_Chrome__labelmodes.png b/uitest/reference-screenshots/chrome/LabelModesTest-testLabelModes_ANY_Chrome__labelmodes.png
index bf3336b972..c887510210 100755
--- a/uitest/reference-screenshots/chrome/LabelModesTest-testLabelModes_ANY_Chrome__labelmodes.png
+++ b/uitest/reference-screenshots/chrome/LabelModesTest-testLabelModes_ANY_Chrome__labelmodes.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/LabelTooltipTest-testLabelToolTipChameleonTheme_ANY_Chrome__tooltipVisible.png b/uitest/reference-screenshots/chrome/LabelTooltipTest-testLabelToolTipChameleonTheme_ANY_Chrome__tooltipVisible.png
index 29a140e7c5..7ae4701802 100644
--- a/uitest/reference-screenshots/chrome/LabelTooltipTest-testLabelToolTipChameleonTheme_ANY_Chrome__tooltipVisible.png
+++ b/uitest/reference-screenshots/chrome/LabelTooltipTest-testLabelToolTipChameleonTheme_ANY_Chrome__tooltipVisible.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ReindeerThemeTest-testTheme_ANY_Chrome__textfields.png b/uitest/reference-screenshots/chrome/ReindeerThemeTest-testTheme_ANY_Chrome__textfields.png
index d2d4f622dd..46daca039a 100755
--- a/uitest/reference-screenshots/chrome/ReindeerThemeTest-testTheme_ANY_Chrome__textfields.png
+++ b/uitest/reference-screenshots/chrome/ReindeerThemeTest-testTheme_ANY_Chrome__textfields.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png
index c688e3107c..127ff1e9a0 100755
--- a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png
+++ b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-first-open.png b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-first-open.png
index 47e5c8a29f..aa1833a1bd 100755
--- a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-first-open.png
+++ b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-first-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png
index 2f0d47f9f5..10ecc55ac7 100755
--- a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png
+++ b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-second-open.png b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-second-open.png
index 3a0c9feceb..55e07942b2 100755
--- a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-second-open.png
+++ b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-second-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-third-open.png b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-third-open.png
index 8c43b9e0ec..96b95eb97f 100755
--- a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-third-open.png
+++ b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-third-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects.png b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects.png
index a7f91f5e7a..7778da28df 100755
--- a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects.png
+++ b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__textfields.png b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__textfields.png
index 80740cb9cb..9649081efd 100755
--- a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__textfields.png
+++ b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__textfields.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/UndefinedSizeScrollbarsTest-testNoScrollbars_ANY_Chrome__noscrollbars.png b/uitest/reference-screenshots/chrome/UndefinedSizeScrollbarsTest-testNoScrollbars_ANY_Chrome__noscrollbars.png
index 4413b4cad5..7ff210fe23 100755
--- a/uitest/reference-screenshots/chrome/UndefinedSizeScrollbarsTest-testNoScrollbars_ANY_Chrome__noscrollbars.png
+++ b/uitest/reference-screenshots/chrome/UndefinedSizeScrollbarsTest-testNoScrollbars_ANY_Chrome__noscrollbars.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled.png b/uitest/reference-screenshots/chrome/VLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled.png
index f6759bcc10..ca57d1ed1e 100644
--- a/uitest/reference-screenshots/chrome/VLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled.png
+++ b/uitest/reference-screenshots/chrome/VLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ValoThemeUITest-selects_ANY_Chrome__selects.png b/uitest/reference-screenshots/chrome/ValoThemeUITest-selects_ANY_Chrome__selects.png
index 32158cd04a..e583cdb314 100755
--- a/uitest/reference-screenshots/chrome/ValoThemeUITest-selects_ANY_Chrome__selects.png
+++ b/uitest/reference-screenshots/chrome/ValoThemeUITest-selects_ANY_Chrome__selects.png
Binary files differ
diff --git a/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxReadOnlyPopup.java b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxReadOnlyPopup.java
new file mode 100644
index 0000000000..a174a9a297
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxReadOnlyPopup.java
@@ -0,0 +1,45 @@
+package com.vaadin.tests.components.combobox;
+
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.event.ShortcutListener;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractReindeerTestUI;
+import com.vaadin.ui.ComboBox;
+
+public class ComboBoxReadOnlyPopup extends AbstractReindeerTestUI {
+
+ static final String[] ITEMS = { "First", "Second", "Third" };
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ String boxLabel = String
+ .format("Press 'Q' to toggle ComboBox's read-only mode");
+ final ComboBox<String> comboBox = new ComboBox<>(boxLabel);
+
+ comboBox.setItems(ITEMS);
+ comboBox.setSelectedItem(ITEMS[0]);
+
+ ShortcutListener shortcutListener = new ShortcutListener("", null,
+ ShortcutAction.KeyCode.Q) {
+ @Override
+ public void handleAction(Object sender, Object target) {
+ comboBox.setReadOnly(!comboBox.isReadOnly());
+ }
+ };
+ comboBox.addShortcutListener(shortcutListener);
+
+ addComponents(comboBox);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "ComboBox that turns to read-only mode while expanded "
+ + "should have its popup set to hidden.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 12021;
+ }
+
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/table/CtrlShiftMultiselect.java b/uitest/src/main/java/com/vaadin/tests/components/table/CtrlShiftMultiselect.java
index 1713dddde5..0a1a1ab560 100644
--- a/uitest/src/main/java/com/vaadin/tests/components/table/CtrlShiftMultiselect.java
+++ b/uitest/src/main/java/com/vaadin/tests/components/table/CtrlShiftMultiselect.java
@@ -10,9 +10,10 @@ import com.vaadin.v7.ui.Table.TableDragMode;
@SuppressWarnings("serial")
public class CtrlShiftMultiselect extends TestBase {
+ protected final Table table = new Table("Multiselectable table");
+
@Override
protected void setup() {
- final Table table = new Table("Multiselectable table");
table.setContainerDataSource(createContainer());
table.setImmediate(true);
diff --git a/uitest/src/main/java/com/vaadin/tests/components/table/CtrlShiftMultiselectTouchDetectionDisabled.java b/uitest/src/main/java/com/vaadin/tests/components/table/CtrlShiftMultiselectTouchDetectionDisabled.java
new file mode 100644
index 0000000000..318b5954e4
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/table/CtrlShiftMultiselectTouchDetectionDisabled.java
@@ -0,0 +1,41 @@
+package com.vaadin.tests.components.table;
+
+import java.util.Set;
+
+import com.vaadin.v7.data.Property;
+import com.vaadin.v7.ui.Label;
+
+public class CtrlShiftMultiselectTouchDetectionDisabled
+ extends CtrlShiftMultiselect {
+
+ protected Label label;
+
+ @Override
+ protected void setup() {
+ super.setup();
+ label = new Label("0");
+ label.setId("count");
+ label.setCaption("Amount of selected items");
+ table.setMultiSelectTouchDetectionEnabled(false);
+ table.addValueChangeListener(new Property.ValueChangeListener() {
+ @Override
+ public void valueChange(Property.ValueChangeEvent event) {
+ Property property = event.getProperty();
+ Set set = (Set) property.getValue();
+ label.setValue("" + set.size());
+ }
+ });
+ addComponent(label);
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Allow disabling multi selection's touch screen detection for hybrid devices";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11601;
+ }
+
+} \ No newline at end of file
diff --git a/uitest/src/main/java/com/vaadin/tests/components/table/TableScrollsOnRefresh.java b/uitest/src/main/java/com/vaadin/tests/components/table/TableScrollsOnRefresh.java
new file mode 100644
index 0000000000..8d4ff119ab
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/table/TableScrollsOnRefresh.java
@@ -0,0 +1,86 @@
+package com.vaadin.tests.components.table;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.v7.data.util.BeanItemContainer;
+import com.vaadin.v7.ui.Table;
+
+public class TableScrollsOnRefresh extends AbstractTestUI {
+ private Table table = new Table(
+ "scroll down table, so it loads next page, and then click 'refresh' button");
+ private Button refresh = new Button("refresh");
+ private BeanItemContainer<TableItem> container = new BeanItemContainer<TableItem>(
+ TableItem.class);
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ refresh.addClickListener(new Button.ClickListener() {
+
+ @Override
+ public void buttonClick(Button.ClickEvent event) {
+ table.refreshRowCache();
+ }
+ });
+ table.setSizeFull();
+ addComponents(refresh, table);
+ VerticalLayout vl = getLayout();
+ vl.setExpandRatio(table, 1f);
+ vl.setSizeFull();
+ vl.getParent().setSizeFull();
+ table.setContainerDataSource(container);
+ populateContainer();
+ }
+
+ private void populateContainer() {
+ List<TableItem> items = new ArrayList<TableItem>();
+ for (int i = 0; i < 1000; i++) {
+ items.add(new TableItem("Item " + Integer.toString(i),
+ "Item description " + Integer.toString(i)));
+
+ }
+ container.addAll(items);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Refreshing row cache shouldn't change scroll position.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 8707;
+ }
+
+ public class TableItem {
+
+ private String name;
+ private String description;
+
+ public TableItem(String name, String description) {
+ this.name = name;
+ this.description = description;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/treetable/TreeTableMultiselect.java b/uitest/src/main/java/com/vaadin/tests/components/treetable/TreeTableMultiselect.java
new file mode 100644
index 0000000000..2ceae92ece
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/treetable/TreeTableMultiselect.java
@@ -0,0 +1,64 @@
+package com.vaadin.tests.components.treetable;
+
+import static com.vaadin.server.Sizeable.Unit.PIXELS;
+
+import java.util.Set;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.v7.data.Property;
+import com.vaadin.v7.ui.Label;
+import com.vaadin.v7.ui.TreeTable;
+
+public class TreeTableMultiselect extends AbstractTestUI {
+
+ protected final TreeTable tt = new TreeTable("Multiselectable treetable");
+ protected Label label;
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ label = new Label("0");
+ label.setCaption("Amount of selected items");
+ label.setId("count");
+
+ tt.setImmediate(true);
+ tt.addContainerProperty("Foo", String.class, "");
+ tt.setColumnWidth("Foo", 100);
+ tt.addContainerProperty("Bar", String.class, "");
+ tt.setColumnWidth("Bar", 100);
+ tt.setHeight(400, PIXELS);
+ Object item1 = tt.addItem(new Object[] { "Foo", "Bar" }, null);
+ Object item2 = tt.addItem(new Object[] { "Foo2", "Bar2" }, null);
+ Object item3 = tt.addItem(new Object[] { "Foo3", "Bar3" }, null);
+ tt.setParent(item2, item1);
+ tt.setParent(item3, item1);
+ tt.setCollapsed(item1, false);
+ tt.setSelectable(true);
+ tt.setMultiSelect(true);
+ tt.setMultiSelectTouchDetectionEnabled(false);
+ tt.setWidth("400px");
+ tt.setHeight("400px");
+ tt.addValueChangeListener(new Property.ValueChangeListener() {
+ @Override
+ public void valueChange(Property.ValueChangeEvent event) {
+ Property property = event.getProperty();
+ Set set = (Set) property.getValue();
+ label.setValue("" + set.size());
+ }
+ });
+
+ addComponent(tt);
+ addComponent(label);
+ }
+
+ @Override
+ public String getTestDescription() {
+ return "Allow disabling multi selection's touch screen detection for hybrid devices";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11601;
+ }
+
+}
diff --git a/uitest/src/main/java/com/vaadin/v7/tests/components/combobox/ComboboxPageLengthZeroFilter.java b/uitest/src/main/java/com/vaadin/v7/tests/components/combobox/ComboboxPageLengthZeroFilter.java
new file mode 100644
index 0000000000..0bde409332
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/v7/tests/components/combobox/ComboboxPageLengthZeroFilter.java
@@ -0,0 +1,89 @@
+/*
+* Copyright 2000-2020 Vaadin Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License. You may obtain a copy of
+* the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+* License for the specific language governing permissions and limitations under
+* the License.
+*/
+package com.vaadin.v7.tests.components.combobox;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.v7.data.util.BeanContainer;
+import com.vaadin.v7.ui.AbstractSelect.ItemCaptionMode;
+import com.vaadin.v7.ui.ComboBox;
+
+/**
+ * Test for issue #11246 where ComboBox set to render from Property does not
+ * filter correctly when page size is 0
+ *
+ * @author Vaadin Ltd
+ */
+@SuppressWarnings("deprecation")
+public class ComboboxPageLengthZeroFilter extends AbstractTestUI {
+
+ public static class Topping {
+ private int id;
+ private String name;
+
+ public Topping(int id, String name) {
+ this.id = id;
+ this.name = name;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+ }
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ BeanContainer<Integer, Topping> container = new BeanContainer<Integer, Topping>(
+ Topping.class);
+ container.setBeanIdProperty("id");
+ for (int i = 0; i < 12; i++) {
+ container.addBean(new Topping(i, "Topping " + i));
+ }
+
+ final ComboBox comboBox = new ComboBox();
+ comboBox.setPageLength(0);
+ comboBox.setItemCaptionMode(ItemCaptionMode.PROPERTY);
+ comboBox.setItemCaptionPropertyId("name");
+ comboBox.setContainerDataSource(container);
+ comboBox.setInvalidAllowed(false);
+ comboBox.setNullSelectionAllowed(false);
+ comboBox.setTextInputAllowed(true);
+
+ getLayout().addComponent(comboBox);
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11246;
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Filtering should work even when ComboBox page length is zero.";
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/VerifyBrowserVersionTest.java b/uitest/src/test/java/com/vaadin/tests/VerifyBrowserVersionTest.java
index 8e5b2485e4..4fc4106bde 100644
--- a/uitest/src/test/java/com/vaadin/tests/VerifyBrowserVersionTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/VerifyBrowserVersionTest.java
@@ -25,7 +25,7 @@ public class VerifyBrowserVersionTest extends MultiBrowserTest {
// Chrome version does not necessarily match the desired version
// because of auto updates...
browserIdentifier = getExpectedUserAgentString(
- getDesiredCapabilities()) + "81";
+ getDesiredCapabilities()) + "83";
} else if (BrowserUtil.isFirefox(getDesiredCapabilities())) {
browserIdentifier = getExpectedUserAgentString(
getDesiredCapabilities()) + "75";
diff --git a/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxReadOnlyPopupTest.java b/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxReadOnlyPopupTest.java
new file mode 100644
index 0000000000..578f2b5c84
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxReadOnlyPopupTest.java
@@ -0,0 +1,26 @@
+package com.vaadin.tests.components.combobox;
+
+import static org.junit.Assert.assertFalse;
+
+import org.junit.Test;
+
+import com.vaadin.testbench.elements.ComboBoxElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class ComboBoxReadOnlyPopupTest extends MultiBrowserTest {
+
+ @Test
+ public void expandedComboBoxSetToReadOnlyShouldHidePopup() {
+ openTestURL();
+
+ ComboBoxElement comboBox = $(ComboBoxElement.class).first();
+ comboBox.openPopup();
+
+ // Calls comboBox.setReadOnly(true);
+ comboBox.sendKeys(String.valueOf('q'));
+
+ assertFalse("Read-only ComboBox's popup should be hidden!",
+ comboBox.isPopupOpen());
+ }
+
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/table/CtrlShiftMultiselectTouchDetectionDisabledTest.java b/uitest/src/test/java/com/vaadin/tests/components/table/CtrlShiftMultiselectTouchDetectionDisabledTest.java
new file mode 100644
index 0000000000..7066b017f6
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/table/CtrlShiftMultiselectTouchDetectionDisabledTest.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.components.table;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.interactions.Actions;
+
+import com.vaadin.testbench.elements.LabelElement;
+import com.vaadin.testbench.elements.TableElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class CtrlShiftMultiselectTouchDetectionDisabledTest
+ extends SingleBrowserTest {
+
+ @Override
+ protected boolean requireWindowFocusForIE() {
+ return true;
+ }
+
+ @Test
+ public void testSelectedCount() {
+ openTestURL();
+ clickRow(3);
+ new Actions(driver).keyDown(Keys.SHIFT).perform();
+ clickRow(8);
+ new Actions(driver).keyUp(Keys.SHIFT).perform();
+ new Actions(driver).release().perform();
+ LabelElement labelElement = $(LabelElement.class).id("count");
+ assertEquals("Unexpected amount of selected rows", "6",
+ labelElement.getText());
+
+ }
+
+ private void clickRow(int index) {
+ TableElement tableElement = $(TableElement.class).first();
+ tableElement.getRow(index).click();
+ }
+
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/table/TableScrollsOnRefreshTest.java b/uitest/src/test/java/com/vaadin/tests/components/table/TableScrollsOnRefreshTest.java
new file mode 100644
index 0000000000..b078d00162
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/table/TableScrollsOnRefreshTest.java
@@ -0,0 +1,48 @@
+package com.vaadin.tests.components.table;
+
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.TableElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class TableScrollsOnRefreshTest extends MultiBrowserTest {
+
+ @Test
+ public void ensureNoScrolling() throws InterruptedException {
+ openTestURL();
+ TableElement table = $(TableElement.class).first();
+ table.scroll(10000);
+ sleep(500); // wait for both data requests
+ String firstCellText = getFirstVisibleCell(table).getText();
+
+ ButtonElement refresh = $(ButtonElement.class).first();
+ refresh.click();
+ sleep(500); // wait for both data requests
+ Assert.assertEquals(firstCellText,
+ getFirstVisibleCell(table).getText());
+
+ refresh.click();
+ sleep(500); // wait for both data requests
+ Assert.assertEquals(firstCellText,
+ getFirstVisibleCell(table).getText());
+ }
+
+ private WebElement getFirstVisibleCell(TableElement table) {
+ int tableBodyTop = table.findElement(By.className("v-table-body"))
+ .getLocation().getY();
+ List<WebElement> cells = table
+ .findElements(By.className("v-table-cell-content"));
+ for (WebElement cell : cells) {
+ if (cell.getLocation().getY() > tableBodyTop) {
+ return cell;
+ }
+ }
+ return null;
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/treetable/TreeTableMultiselectTest.java b/uitest/src/test/java/com/vaadin/tests/components/treetable/TreeTableMultiselectTest.java
new file mode 100644
index 0000000000..36107f122e
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/treetable/TreeTableMultiselectTest.java
@@ -0,0 +1,38 @@
+package com.vaadin.tests.components.treetable;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.interactions.Actions;
+
+import com.vaadin.testbench.elements.LabelElement;
+import com.vaadin.testbench.elements.TreeTableElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class TreeTableMultiselectTest extends SingleBrowserTest {
+
+ @Override
+ protected boolean requireWindowFocusForIE() {
+ return true;
+ }
+
+ @Test
+ public void testSelectedCount() {
+ openTestURL();
+ clickRow(0);
+ new Actions(driver).keyDown(Keys.SHIFT).perform();
+ clickRow(2);
+ new Actions(driver).keyUp(Keys.SHIFT).perform();
+ new Actions(driver).release().perform();
+ LabelElement labelElement = $(LabelElement.class).id("count");
+ assertEquals("Unexpected amount of selected rows", "3",
+ labelElement.getText());
+ }
+
+ private void clickRow(int index) {
+ TreeTableElement treeTable = $(TreeTableElement.class).first();
+ treeTable.getRow(index).click();
+ }
+
+}
diff --git a/uitest/src/test/java/com/vaadin/v7/tests/components/combobox/ComboboxPageLengthZeroFilterTest.java b/uitest/src/test/java/com/vaadin/v7/tests/components/combobox/ComboboxPageLengthZeroFilterTest.java
new file mode 100644
index 0000000000..2df375b3e9
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/v7/tests/components/combobox/ComboboxPageLengthZeroFilterTest.java
@@ -0,0 +1,28 @@
+package com.vaadin.v7.tests.components.combobox;
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.testbench.By;
+import com.vaadin.testbench.elements.ComboBoxElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class ComboboxPageLengthZeroFilterTest extends MultiBrowserTest {
+
+ @Test
+ public void testOptionsNotEmpty() {
+ openTestURL();
+
+ List<String> suggestions = getFilterSuggestions("T");
+
+ Assert.assertEquals("All items should be presented!", 12,
+ suggestions.size());
+ }
+
+ private List<String> getFilterSuggestions(String string) {
+ ComboBoxElement comboBox = $(ComboBoxElement.class).first();
+ comboBox.findElement(By.vaadin("#textbox")).sendKeys(string);
+ return comboBox.getPopupSuggestions();
+ }
+}