Avoid object creation in getAllChildrenIterable in most cases. (#14142)
API change from:
public static Iterable<ClientConnector> getAllChildrenIterable(final ClientConnector connector)
to
public static Iterable<? extends ClientConnector> getAllChildrenIterable(final ClientConnector connector)
avoids creating wrappers in case the component has either no subcomponents
or no extensions. This covers the vast majority of components.
Change-Id: I48ffd2f26f09c265fae6e1aaabdbaa655d52ffb8
This reverts commit 1b73b00b28 as
well as the related changes to @since, release notes etc.
Conflicts:
client/src/com/vaadin/client/ResourceLoader.java
client/src/com/vaadin/client/communication/TranslatedURLReference.java
client/src/com/vaadin/client/ui/ui/UIConnector.java
server/src/com/vaadin/ui/UI.java
shared/src/com/vaadin/shared/ui/ui/UIState.java
uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java
Change-Id: Id882dc730f51055f6d17200964bcaf8a1f87a35f
Change row data type from String[] to String (#13334)
Instead of having the data type as one-string-per-column, we now have the entire
row encoded as JSON
Change-Id: I709b2daa88c516d98203ef463b57257a6647bacd
Reading properties of components should not set state to dirty (#14060).
Added Automatic Testcase. The testcase needs a default constructor,
which has been added.
The test also found an edge case in Form.java which has been corrected,
as well as one missing getState(false) in AbstractMedia.
Change-Id: Id764c9e1596123015a84f6c2a9507f03bde383b1
Reading properties of components should not set state to dirty (#14060).
Many core vaadin components did incorrectly mark the state as dirty when
reading from them. This patch fixes the problem, which should reduce the
amount of server->client state updates significantly.
Change-Id: I342d74129e2985a7f407e9b53a802dc0146d9992
Removes double spacing from gridLayout which has empty rows or columns (#8855)
If row has no elements or only invisible elements, its size will be set to zero.
When row expand ratio was set, its size will be assigned to the value according to an expand ratio.
If component takes several rows of the gridLayout, these rows are considered as non-empty and won't be removed.
Change-Id: I10ddd22a6c9535b9978769bab7b496e11a28b78a
JsonCodec#encode() is a frequently called (hot) method. However in its
current form it is too long to be inlined.
This review reduces the length of the method from 454 bytes instructions
to 311 and optimises flow of common calls.
It however has a behaviour change for esoteric edge cases where the
order would matter. Like a custom collection which extends JSONArray and
implements collection. Previously it would have been handled by the
collection case, now its the JSONArray case. However it can be assumed
that the result: serialized to valid JSON is the same.
Change-Id: Ia552eec6322d0760581336b8b038fa03761c1d69
Move ActiveRowHandler to the data provider extension (#13334)
This makes GridConnector include information about what rows are cached
when more data is requested instead of the previous way of synchronizing
this separately every time a scroll event occurs. This new approach
makes it possible to have rows cached even if they are not in view. It
also improves performance since there's no need to do an RPC every time
scrolling changes what is visible.
Change-Id: Ibfe8a69586dfc397591f56efa8ef351e274f0116
The UI.pushConnection field is transient no longer; instead PushConnection
implementations must take care of serialization internally. When a session
is serialized, the client should notice that push was disconnected and
try to reconnect. A deserialized PushConnection should be in a "disconnected"
state so the eventual client reconnection works correctly.
Change-Id: I38cfc5a5cdbd3643311f830f8d580458dcd85c56
cleanConnectorMap is a hot method.
This change improves multiple code paths:
1) The global resource handler is no longer get()ed from the session for
each connector (was in two loops).
2) The ConnectorTracker is no longer get()ed from the UI for each
connector (was in one loop).
3) values() iterator for ClientConnectors replaces
keySet() iterator + get(key) call
4) use getUI() from ClientConnector instead manual method.
5) moved removeUnregisteredConnectors to ease inlining and readability.
Change-Id: I25ff5bc32d27d30ecd8d354922ec6e4a02b05921
getAllChildrenIterable() is invoked frequently, its used by
attach/detach and markAsDirty.
Because of the implementation detail in CombinedIterator, on every call
all iterators are checked. This means that on every component which has
multiple childs, each next() call will first check the extension
iterator, before advancing in the child iterator.
By having the childs first, this overhead is reduced. If no extensions
are existing (which is quite common) the iterator is not added at all.
(creating an iterator on an empty UnmodifiableCollection is waste of
time and memory)
Change-Id: I23bb91464052ad4282963ec4b5be8a52c6847d4f
Allow editing colorpicker values in colorpicker in textfield #13469
This fix adds support for typing in color values according to
http://www.w3schools.com/cssref/css_colors_legal.asp into the
colorpicker popup input textfield.
Change-Id: If14ead791725c3052c05aa31e12e237e90c32348