From c7a48ae008d0c2a168635b863fe2e44d708c4b02 Mon Sep 17 00:00:00 2001 From: John Ahlroos Date: Fri, 9 Aug 2013 10:59:11 +0300 Subject: Delay sending DateField popup value to server until popup is closed #6252 Change-Id: Ib6f4681ea38fe7a6cac8a44bc4ab4b23151844dd --- .../src/com/vaadin/client/ui/VPopupCalendar.java | 3 -- .../ui/datefield/PopupDateFieldConnector.java | 32 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 3 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 e431da127d..57a0222118 100644 --- a/client/src/com/vaadin/client/ui/VPopupCalendar.java +++ b/client/src/com/vaadin/client/ui/VPopupCalendar.java @@ -217,9 +217,6 @@ public class VPopupCalendar extends VTextualDate implements Field, } } } - if (isImmediate()) { - getClient().sendPendingVariableChanges(); - } } } diff --git a/client/src/com/vaadin/client/ui/datefield/PopupDateFieldConnector.java b/client/src/com/vaadin/client/ui/datefield/PopupDateFieldConnector.java index 7257af4a08..627478ebe5 100644 --- a/client/src/com/vaadin/client/ui/datefield/PopupDateFieldConnector.java +++ b/client/src/com/vaadin/client/ui/datefield/PopupDateFieldConnector.java @@ -18,6 +18,9 @@ package com.vaadin.client.ui.datefield; import java.util.Date; +import com.google.gwt.event.logical.shared.CloseEvent; +import com.google.gwt.event.logical.shared.CloseHandler; +import com.google.gwt.user.client.ui.PopupPanel; import com.vaadin.client.ApplicationConnection; import com.vaadin.client.DateTimeService; import com.vaadin.client.UIDL; @@ -33,6 +36,35 @@ import com.vaadin.ui.DateField; @Connect(DateField.class) public class PopupDateFieldConnector extends TextualDateConnector { + /* + * (non-Javadoc) + * + * @see com.vaadin.client.ui.AbstractConnector#init() + */ + @Override + protected void init() { + getWidget().popup.addCloseHandler(new CloseHandler() { + + @Override + public void onClose(CloseEvent event) { + /* + * FIXME This is a hack so we do not have to rewrite half of the + * datefield so values are not sent while selecting a date + * (#6252). + * + * The datefield will now only set the date UIDL variables while + * the user is selecting year/month/date/time and not send them + * directly. Only when the user closes the popup (by clicking on + * a day/enter/clicking outside of popup) then the new value is + * communicated to the server. + */ + if (getWidget().isImmediate()) { + getConnection().sendPendingVariableChanges(); + } + } + }); + } + /* * (non-Javadoc) * -- cgit v1.2.3