From a8d5c504248a0e8dfece3d9ec2cb4f83c4b65395 Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Wed, 9 Jul 2008 13:33:55 +0000 Subject: [PATCH] fixes #1581 svn changeset:5074/svn branch:trunk --- .../gwt/client/ui/IProgressIndicator.java | 14 ++++ .../toolkit/tests/tickets/Ticket1581.java | 69 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 src/com/itmill/toolkit/tests/tickets/Ticket1581.java diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IProgressIndicator.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IProgressIndicator.java index c7c062c138..67100b8544 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IProgressIndicator.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IProgressIndicator.java @@ -20,6 +20,7 @@ public class IProgressIndicator extends Widget implements Paintable { private ApplicationConnection client; private final Poller poller; private boolean indeterminate = false; + private boolean pollerSuspendedDueDetach; public IProgressIndicator() { setElement(wrapper); @@ -64,6 +65,19 @@ public class IProgressIndicator extends Widget implements Paintable { } } + protected void onAttach() { + super.onAttach(); + if (pollerSuspendedDueDetach) { + poller.run(); + } + } + + protected void onDetach() { + super.onDetach(); + poller.cancel(); + pollerSuspendedDueDetach = true; + } + public void setVisible(boolean visible) { super.setVisible(visible); if (!visible) { diff --git a/src/com/itmill/toolkit/tests/tickets/Ticket1581.java b/src/com/itmill/toolkit/tests/tickets/Ticket1581.java new file mode 100644 index 0000000000..cd880ced9d --- /dev/null +++ b/src/com/itmill/toolkit/tests/tickets/Ticket1581.java @@ -0,0 +1,69 @@ +package com.itmill.toolkit.tests.tickets; + +import java.util.Date; + +import com.itmill.toolkit.ui.Button; +import com.itmill.toolkit.ui.Label; +import com.itmill.toolkit.ui.ProgressIndicator; +import com.itmill.toolkit.ui.Window; +import com.itmill.toolkit.ui.Button.ClickEvent; +import com.itmill.toolkit.ui.Button.ClickListener; + +public class Ticket1581 extends com.itmill.toolkit.Application { + + private Label time; + private ProgressIndicator poller; + private Thread thread; + + public void init() { + final Window main = new Window(getClass().getName().substring( + getClass().getName().lastIndexOf(".") + 1)); + setMainWindow(main); + + main.addComponent(new Label("Test the second issue in ticket #1581")); + + time = new Label(); + poller = new ProgressIndicator(); + poller.setPollingInterval(200); + main.addComponent(time); + main.addComponent(poller); + + thread = new Thread() { + + public void run() { + super.run(); + while (true) { + time.setValue(new Date()); + try { + sleep(200); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + + }; + + thread.start(); + + final Button stop = new Button("Stop updating", new ClickListener() { + boolean active = true; + + public void buttonClick(ClickEvent event) { + + if (active) { + main.removeComponent(poller); + event.getButton().setCaption("Resume"); + } else { + main.addComponent(poller); + event.getButton().setCaption("Stop updating"); + } + active = !active; + } + }); + + main.addComponent(stop); + } + +} -- 2.39.5