chiark / gitweb /
clock: Implement held_change_hook, at least in part
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 20 Mar 2021 18:47:04 +0000 (18:47 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 20 Mar 2021 21:52:02 +0000 (21:52 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/clock.rs

index a5b676d55c662be84ee0a4aa41cc13bc7357c756..63e8b0892b2328bfce09b24a5a684be7d01fbccd 100644 (file)
@@ -658,5 +658,22 @@ impl PieceTrait for Clock {
     }
   }
 
+  #[throws(IE)]
+  fn held_change_hook(&self,
+                      ig: &InstanceRef,
+                      gpieces: &mut GPieces,
+                      piece: PieceId,
+                      was_held: Option<PlayerId>)
+                      -> UnpreparedUpdates {
+    let gpc = gpieces.get_mut(piece);
+    let gpc = if let Some(gpc) = gpc { gpc } else { return None };
+    let now_held = gpc.held;
+    let state: &mut State = gpc.xdata_mut_exp()?;
+    let was_running = state.implies_running(was_held);
+
+    state.do_start_or_stop(piece, was_running, now_held, ig)?;
+    unprepared_update(piece)
+  }
+
   fn itemname(&self) -> &str { "chess-clock" }
 }