# HG changeset patch # User wenzelm # Date 1314804169 -7200 # Node ID 76c2e3ddc183719c0c72de25fdfa45f071c6638f # Parent 274eff0ea12e5de955f43fdda264685933d4cc28 tuned Commands_Changed: cover nodes as well; diff -r 274eff0ea12e -r 76c2e3ddc183 src/Pure/System/session.scala --- a/src/Pure/System/session.scala Wed Aug 31 15:41:22 2011 +0200 +++ b/src/Pure/System/session.scala Wed Aug 31 17:22:49 2011 +0200 @@ -22,7 +22,7 @@ case object Global_Settings case object Perspective case object Assignment - case class Commands_Changed(set: Set[Command]) + case class Commands_Changed(nodes: Set[String], commands: Set[Command]) sealed abstract class Phase case object Inactive extends Phase @@ -63,7 +63,10 @@ private val (_, command_change_buffer) = Simple_Thread.actor("command_change_buffer", daemon = true) { - var changed: Set[Command] = Set() + var changed_nodes: Set[String] = Set.empty + var changed_commands: Set[Command] = Set.empty + def changed: Boolean = !changed_nodes.isEmpty || !changed_commands.isEmpty + var flush_time: Option[Long] = None def flush_timeout: Long = @@ -74,8 +77,10 @@ def flush() { - if (!changed.isEmpty) commands_changed.event(Session.Commands_Changed(changed)) - changed = Set() + if (changed) + commands_changed.event(Session.Commands_Changed(changed_nodes, changed_commands)) + changed_nodes = Set.empty + changed_commands = Set.empty flush_time = None } @@ -91,7 +96,10 @@ var finished = false while (!finished) { receiveWithin(flush_timeout) { - case command: Command => changed += command; invoke() + case command: Command => + changed_nodes += command.node_name + changed_commands += command + invoke() case TIMEOUT => flush() case Stop => finished = true; reply(()) case bad => System.err.println("command_change_buffer: ignoring bad message " + bad) diff -r 274eff0ea12e -r 76c2e3ddc183 src/Tools/jEdit/src/document_view.scala --- a/src/Tools/jEdit/src/document_view.scala Wed Aug 31 15:41:22 2011 +0200 +++ b/src/Tools/jEdit/src/document_view.scala Wed Aug 31 17:22:49 2011 +0200 @@ -442,27 +442,29 @@ private val main_actor = actor { loop { react { - case Session.Commands_Changed(changed) => + case changed: Session.Commands_Changed => val buffer = model.buffer Isabelle.swing_buffer_lock(buffer) { val (updated, snapshot) = flush_snapshot() val visible = visible_range() - if (updated || changed.exists(snapshot.node.commands.contains)) + if (updated || + (changed.nodes.contains(model.node_name) && + changed.commands.exists(snapshot.node.commands.contains))) overview.repaint() if (updated) invalidate_range(visible) else { val visible_cmds = snapshot.node.command_range(snapshot.revert(visible)).map(_._1) - if (visible_cmds.exists(changed)) { + if (visible_cmds.exists(changed.commands)) { for { line <- 0 until text_area.getVisibleLines val start = text_area.getScreenLineStartOffset(line) if start >= 0 val end = text_area.getScreenLineEndOffset(line) if end >= 0 val range = proper_line_range(start, end) val line_cmds = snapshot.node.command_range(snapshot.revert(range)).map(_._1) - if line_cmds.exists(changed) + if line_cmds.exists(changed.commands) } text_area.invalidateScreenLineRange(line, line) } } diff -r 274eff0ea12e -r 76c2e3ddc183 src/Tools/jEdit/src/output_dockable.scala --- a/src/Tools/jEdit/src/output_dockable.scala Wed Aug 31 15:41:22 2011 +0200 +++ b/src/Tools/jEdit/src/output_dockable.scala Wed Aug 31 17:22:49 2011 +0200 @@ -105,7 +105,7 @@ loop { react { case Session.Global_Settings => handle_resize() - case Session.Commands_Changed(changed) => handle_update(Some(changed)) + case changed: Session.Commands_Changed => handle_update(Some(changed.commands)) case Session.Perspective => if (follow_caret && handle_perspective()) handle_update() case bad => System.err.println("Output_Dockable: ignoring bad message " + bad) }