src/Pure/System/swing_thread.scala
changeset 46740 852baa599351
parent 46574 41701fce8ac7
child 47989 1e790c27162d
equal deleted inserted replaced
46739:6024353549ca 46740:852baa599351
    43   }
    43   }
    44 
    44 
    45 
    45 
    46   /* delayed actions */
    46   /* delayed actions */
    47 
    47 
    48   private def delayed_action(first: Boolean)(time: Time)(action: => Unit): () => Unit =
    48   private def delayed_action(first: Boolean)(time: Time)(action: => Unit): Boolean => Unit =
    49   {
    49   {
    50     val listener = new ActionListener {
    50     val listener = new ActionListener {
    51       override def actionPerformed(e: ActionEvent) { Swing_Thread.assert(); action }
    51       override def actionPerformed(e: ActionEvent) { Swing_Thread.assert(); action }
    52     }
    52     }
    53     val timer = new Timer(time.ms.toInt, listener)
    53     val timer = new Timer(time.ms.toInt, listener)
    54     timer.setRepeats(false)
    54     timer.setRepeats(false)
    55 
    55 
    56     def invoke() { later { if (first) timer.start() else timer.restart() } }
    56     def invoke() { later { if (first) timer.start() else timer.restart() } }
    57     invoke _
    57     def revoke() { timer.stop() }
       
    58 
       
    59     (active: Boolean) => if (active) invoke() else revoke()
    58   }
    60   }
    59 
    61 
    60   // delayed action after first invocation
    62   // delayed action after first invocation
    61   def delay_first = delayed_action(true) _
    63   def delay_first = delayed_action(true) _
    62 
    64