more careful syntax_changed propagation -- avoid global jEdit.propertiesChanged;
authorwenzelm
Tue, 02 Dec 2014 16:10:11 +0100
changeset 59078 cf255dc2b48f
parent 59077 7e0d3da6e6d8
child 59079 12a689755c3d
more careful syntax_changed propagation -- avoid global jEdit.propertiesChanged;
src/Tools/jEdit/src/document_model.scala
src/Tools/jEdit/src/jedit_resources.scala
--- a/src/Tools/jEdit/src/document_model.scala	Tue Dec 02 14:16:56 2014 +0100
+++ b/src/Tools/jEdit/src/document_model.scala	Tue Dec 02 16:10:11 2014 +0100
@@ -15,7 +15,7 @@
 
 import org.gjt.sp.jedit.jEdit
 import org.gjt.sp.jedit.Buffer
-import org.gjt.sp.jedit.buffer.{BufferAdapter, BufferListener, JEditBuffer}
+import org.gjt.sp.jedit.buffer.{BufferAdapter, BufferListener, JEditBuffer, LineManager}
 
 
 object Document_Model
@@ -284,28 +284,42 @@
   }
 
 
-  /* activation */
+  /* syntax */
 
-  private def refresh_token_marker()
+  def syntax_changed()
+  {
+    Untyped.get(buffer, "lineMgr").asInstanceOf[LineManager].setFirstInvalidLineContext(0)
+    for (text_area <- JEdit_Lib.jedit_text_areas(buffer)) {
+      val c = Class.forName("org.gjt.sp.jedit.textarea.TextArea")
+      val m = c.getDeclaredMethod("foldStructureChanged")
+      m.setAccessible(true)
+      m.invoke(text_area)
+    }
+  }
+
+  private def init_token_marker()
   {
     Isabelle.buffer_token_marker(buffer) match {
       case Some(marker) if marker != buffer.getTokenMarker =>
-        buffer.setTokenMarker(jEdit.getMode("text").getTokenMarker)
         buffer.setTokenMarker(marker)
+        syntax_changed()
       case _ =>
     }
   }
 
+
+  /* activation */
+
   private def activate()
   {
     pending_edits.edit(true, Text.Edit.insert(0, JEdit_Lib.buffer_text(buffer)))
     buffer.addBufferListener(buffer_listener)
-    refresh_token_marker()
+    init_token_marker()
   }
 
   private def deactivate()
   {
     buffer.removeBufferListener(buffer_listener)
-    refresh_token_marker()
+    init_token_marker()
   }
 }
--- a/src/Tools/jEdit/src/jedit_resources.scala	Tue Dec 02 14:16:56 2014 +0100
+++ b/src/Tools/jEdit/src/jedit_resources.scala	Tue Dec 02 16:10:11 2014 +0100
@@ -114,7 +114,15 @@
 
   override def commit(change: Session.Change)
   {
-    if (!change.syntax_changed.isEmpty) GUI_Thread.later { jEdit.propertiesChanged() }
+    if (!change.syntax_changed.isEmpty)
+      GUI_Thread.later {
+        val changed = change.syntax_changed.toSet
+        for {
+          buffer <- JEdit_Lib.jedit_buffers()
+          model <- PIDE.document_model(buffer)
+          if changed(model.node_name)
+        } model.syntax_changed()
+      }
     if (change.deps_changed && PIDE.options.bool("jedit_auto_load")) PIDE.deps_changed()
   }
 }