]> source.dussan.org Git - vaadin-framework.git/commitdiff
fixes #1581
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 9 Jul 2008 13:33:55 +0000 (13:33 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 9 Jul 2008 13:33:55 +0000 (13:33 +0000)
svn changeset:5074/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/ui/IProgressIndicator.java
src/com/itmill/toolkit/tests/tickets/Ticket1581.java [new file with mode: 0644]

index c7c062c138393ee56d5330c35482d709f51c4566..67100b854453a795aeb962f0ba80b241f11755d7 100644 (file)
@@ -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 (file)
index 0000000..cd880ce
--- /dev/null
@@ -0,0 +1,69 @@
+package com.itmill.toolkit.tests.tickets;\r
+\r
+import java.util.Date;\r
+\r
+import com.itmill.toolkit.ui.Button;\r
+import com.itmill.toolkit.ui.Label;\r
+import com.itmill.toolkit.ui.ProgressIndicator;\r
+import com.itmill.toolkit.ui.Window;\r
+import com.itmill.toolkit.ui.Button.ClickEvent;\r
+import com.itmill.toolkit.ui.Button.ClickListener;\r
+\r
+public class Ticket1581 extends com.itmill.toolkit.Application {\r
+\r
+    private Label time;\r
+    private ProgressIndicator poller;\r
+    private Thread thread;\r
+\r
+    public void init() {\r
+        final Window main = new Window(getClass().getName().substring(\r
+                getClass().getName().lastIndexOf(".") + 1));\r
+        setMainWindow(main);\r
+\r
+        main.addComponent(new Label("Test the second issue in ticket #1581"));\r
+\r
+        time = new Label();\r
+        poller = new ProgressIndicator();\r
+        poller.setPollingInterval(200);\r
+        main.addComponent(time);\r
+        main.addComponent(poller);\r
+\r
+        thread = new Thread() {\r
+\r
+            public void run() {\r
+                super.run();\r
+                while (true) {\r
+                    time.setValue(new Date());\r
+                    try {\r
+                        sleep(200);\r
+                    } catch (InterruptedException e) {\r
+                        // TODO Auto-generated catch block\r
+                        e.printStackTrace();\r
+                    }\r
+                }\r
+            }\r
+\r
+        };\r
+\r
+        thread.start();\r
+\r
+        final Button stop = new Button("Stop updating", new ClickListener() {\r
+            boolean active = true;\r
+\r
+            public void buttonClick(ClickEvent event) {\r
+\r
+                if (active) {\r
+                    main.removeComponent(poller);\r
+                    event.getButton().setCaption("Resume");\r
+                } else {\r
+                    main.addComponent(poller);\r
+                    event.getButton().setCaption("Stop updating");\r
+                }\r
+                active = !active;\r
+            }\r
+        });\r
+\r
+        main.addComponent(stop);\r
+    }\r
+\r
+}\r