[meld] Avoid flash of pre-merging text in auto-merge mode



commit ff6af6fa1e5ea4ff2834f444ee98ade57b2e244a
Author: Kai Willadsen <kai willadsen gmail com>
Date:   Tue Sep 25 05:33:52 2012 +1000

    Avoid flash of pre-merging text in auto-merge mode
    
    This commit also touches some of the FileDiff expose code that assumed
    a particular arrangement of buffer-view correspondence. While this
    assumption exists elsewhere, it's only relevant here; elsewhere
    requires that the files already be loaded.

 meld/filediff.py  |   17 +++++++++--------
 meld/filemerge.py |    3 +++
 2 files changed, 12 insertions(+), 8 deletions(-)
---
diff --git a/meld/filediff.py b/meld/filediff.py
index 7604d3d..0269cce 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -1209,6 +1209,7 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
 
         visible = textview.get_visible_rect()
         pane = self.textview.index(textview)
+        textbuffer = textview.get_buffer()
         area = event.area
         x, y = textview.window_to_buffer_coords(gtk.TEXT_WINDOW_WIDGET,
                                                 area.x, area.y)
@@ -1237,8 +1238,8 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
             context.stroke()
 
         if textview.is_focus() and self.cursor.line is not None:
-            it = self.textbuffer[pane].get_iter_at_line(self.cursor.line)
-            ypos, line_height = self.textview[pane].get_line_yrange(it)
+            it = textbuffer.get_iter_at_line(self.cursor.line)
+            ypos, line_height = textview.get_line_yrange(it)
             context.save()
             context.rectangle(0, ypos - visible.y, width, line_height)
             context.clip()
@@ -1253,10 +1254,10 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
             rgba_pairs = zip(c.start_rgba, c.end_rgba)
             rgba = [s + (e - s) * percent for s, e in rgba_pairs]
 
-            it = self.textbuffer[pane].get_iter_at_mark(c.start_mark)
-            ystart, _ = self.textview[pane].get_line_yrange(it)
-            it = self.textbuffer[pane].get_iter_at_mark(c.end_mark)
-            yend, _ = self.textview[pane].get_line_yrange(it)
+            it = textbuffer.get_iter_at_mark(c.start_mark)
+            ystart, _ = textview.get_line_yrange(it)
+            it = textbuffer.get_iter_at_mark(c.end_mark)
+            yend, _ = textview.get_line_yrange(it)
             if ystart == yend:
                 ystart -= 1
 
@@ -1267,8 +1268,8 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
             if current_time <= c.start_time + c.duration:
                 new_anim_chunks.append(c)
             else:
-                self.textbuffer[pane].delete_mark(c.start_mark)
-                self.textbuffer[pane].delete_mark(c.end_mark)
+                textbuffer.delete_mark(c.start_mark)
+                textbuffer.delete_mark(c.end_mark)
         self.animating_chunks[pane] = new_anim_chunks
 
         if self.animating_chunks[pane] and self.anim_source_id[pane] is None:
diff --git a/meld/filemerge.py b/meld/filemerge.py
index 60d4d99..4f2a3aa 100644
--- a/meld/filemerge.py
+++ b/meld/filemerge.py
@@ -19,6 +19,7 @@ from gettext import gettext as _
 import gtk
 
 import filediff
+import meldbuffer
 import merge
 
 
@@ -32,10 +33,12 @@ class FileMerge(filediff.FileDiff):
         self.textview[2].set_editable(0)
 
     def _set_files_internal(self, files):
+        self.textview[1].set_buffer(meldbuffer.MeldBuffer())
         for i in self._load_files(files, self.textbuffer):
             yield i
         for i in self._merge_files():
             yield i
+        self.textview[1].set_buffer(self.textbuffer[1])
         for i in self._diff_files():
             yield i
         filediff.FileDiff.set_buffer_writable(self, self.textbuffer[1], True)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]