about summary refs log tree commit diff stats
path: root/src/server/buffer.nim
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/buffer.nim')
-rw-r--r--src/server/buffer.nim11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/server/buffer.nim b/src/server/buffer.nim
index 846191a7..41b1ec1e 100644
--- a/src/server/buffer.nim
+++ b/src/server/buffer.nim
@@ -893,10 +893,10 @@ proc updateHover*(buffer: Buffer; cursorx, cursory: int): UpdateHoverResult
   let prevNode = buffer.prevHover
   if thisNode != prevNode and (thisNode == nil or prevNode == nil or
       thisNode != prevNode):
+    var oldHover: seq[Element] = @[]
     for element in prevNode.branchElems:
       if element.hover:
-        element.setHover(false)
-        repaint = true
+        oldHover.add(element)
     for ht in HoverType:
       let s = HoverFun[ht](buffer, thisNode)
       if buffer.hoverText[ht] != s:
@@ -906,6 +906,13 @@ proc updateHover*(buffer: Buffer; cursorx, cursory: int): UpdateHoverResult
       if not element.hover:
         element.setHover(true)
         repaint = true
+      elif (let i = oldHover.find(element); i != -1):
+        # branches converged
+        oldHover.setLen(i)
+        break
+    for element in oldHover:
+      element.setHover(false)
+      repaint = true
   if repaint:
     buffer.reshape()
   buffer.prevHover = thisNode