Browse Source

Remove workarounds for broken Timer.cancel in IE (#11872)

Change-Id: Ib60d6131d36e794bcf72d5f498bb59fafdbf7d0e
tags/7.1.0
Leif Åstrand 11 years ago
parent
commit
46cc08b537

+ 0
- 8
client/src/com/vaadin/client/ApplicationConnection.java View File

@@ -3277,14 +3277,6 @@ public class ApplicationConnection {
Timer forceHandleMessage = new Timer() {
@Override
public void run() {
if (responseHandlingLocks.isEmpty()) {
/*
* Timer fired but there's nothing to clear. This can happen
* with IE8 as Timer.cancel is not always effective (see GWT
* issue 8101).
*/
return;
}
VConsole.log("WARNING: reponse handling was never resumed, forcibly removing locks...");
responseHandlingLocks.clear();
handlePendingMessages();

+ 3
- 54
client/src/com/vaadin/client/VLoadingIndicator.java View File

@@ -42,75 +42,24 @@ public class VLoadingIndicator {
private int secondDelay = 1500;
private int thirdDelay = 5000;

/**
* Timer with method for checking if it has been cancelled. This class is a
* workaround for a IE8 problem which causes a timer to be fired even if it
* has been cancelled.
*
* @author Vaadin Ltd
* @since 7.1
*/
private abstract static class LoadingIndicatorTimer extends Timer {
private boolean cancelled = false;

@Override
public void cancel() {
super.cancel();
cancelled = true;
}

@Override
public void schedule(int delayMillis) {
super.schedule(delayMillis);
cancelled = false;
}

@Override
public void scheduleRepeating(int periodMillis) {
super.scheduleRepeating(periodMillis);
cancelled = false;
}

/**
* Checks if this timer has been cancelled.
*
* @return true if the timer has been cancelled, false otherwise
*/
public boolean isCancelled() {
return cancelled;
}
}

private Timer firstTimer = new LoadingIndicatorTimer() {
private Timer firstTimer = new Timer() {
@Override
public void run() {
if (isCancelled()) {
// IE8 does not properly cancel the timer in all cases.
return;
}
show();
}
};
private Timer secondTimer = new LoadingIndicatorTimer() {
private Timer secondTimer = new Timer() {
@Override
public void run() {
if (isCancelled()) {
// IE8 does not properly cancel the timer in all cases.
return;
}
getElement().setClassName(PRIMARY_STYLE_NAME);
getElement().addClassName("second");
// For backwards compatibility only
getElement().addClassName(PRIMARY_STYLE_NAME + "-delay");
}
};
private Timer thirdTimer = new LoadingIndicatorTimer() {
private Timer thirdTimer = new Timer() {
@Override
public void run() {
if (isCancelled()) {
// IE8 does not properly cancel the timer in all cases.
return;
}
getElement().setClassName(PRIMARY_STYLE_NAME);
getElement().addClassName("third");
// For backwards compatibility only

+ 3
- 10
client/src/com/vaadin/client/ui/ui/UIConnector.java View File

@@ -645,16 +645,9 @@ public class UIConnector extends AbstractSingleComponentContainerConnector
pollTimer = new Timer() {
@Override
public void run() {
/*
* Verify that polling has not recently been canceled. This
* is needed because Timer.cancel() does not always work
* properly in IE 8 until GWT issue 8101 has been fixed.
*/
if (pollTimer != null) {
getRpcProxy(UIServerRpc.class).poll();
// Send changes even though poll is @Delayed
getConnection().sendPendingVariableChanges();
}
getRpcProxy(UIServerRpc.class).poll();
// Send changes even though poll is @Delayed
getConnection().sendPendingVariableChanges();
}
};
pollTimer.scheduleRepeating(getState().pollInterval);

Loading…
Cancel
Save