-    /* when getting called from GDK's timer handler we
-       are no longer within GDK's grab on the GUI
-       thread so we must lock it here ourselves */
+    const bool keepGoing = !timer->IsOneShot();
+    if ( !keepGoing )
+        timer->Stop();
+
+    // When getting called from GDK's timer handler we
+    // are no longer within GDK's grab on the GUI
+    // thread so we must lock it here ourselves.