about summary refs log tree commit diff stats
path: root/ranger/gui/widgets/pager.py
diff options
context:
space:
mode:
Diffstat (limited to 'ranger/gui/widgets/pager.py')
-rw-r--r--ranger/gui/widgets/pager.py34
1 files changed, 26 insertions, 8 deletions
diff --git a/ranger/gui/widgets/pager.py b/ranger/gui/widgets/pager.py
index 85871431..ab6220db 100644
--- a/ranger/gui/widgets/pager.py
+++ b/ranger/gui/widgets/pager.py
@@ -8,6 +8,10 @@ from ranger.ext.move import move_between
 class Pager(Widget):
 	source = None
 	source_is_stream = False
+
+	old_source = None
+	old_scroll_begin = 0
+	old_startx = 0
 	def __init__(self, win, embedded=False):
 		Widget.__init__(self, win)
 		self.embedded = embedded
@@ -27,20 +31,34 @@ class Pager(Widget):
 	def open(self):
 		self.scroll_begin = 0
 		self.startx = 0
+		self.need_redraw = True
 	
 	def close(self):
 		if self.source and self.source_is_stream:
 			self.source.close()
 	
 	def draw(self):
-		line_gen = self._generate_lines(
-				starty=self.scroll_begin, startx=self.startx)
-
-		for line, i in zip(line_gen, range(self.hei)):
-			try:
-				self.addstr(i, 0, line)
-			except TypeError:
-				pass
+		if self.old_source != self.source:
+			self.old_source = self.source
+			self.need_redraw = True
+
+		if self.old_scroll_begin != self.scroll_begin or \
+				self.old_startx != self.startx:
+			self.old_startx = self.startx
+			self.old_scroll_begin = self.scroll_begin
+		self.need_redraw = True
+
+		if self.need_redraw:
+			self.win.erase()
+			line_gen = self._generate_lines(
+					starty=self.scroll_begin, startx=self.startx)
+
+			for line, i in zip(line_gen, range(self.hei)):
+				try:
+					self.addstr(i, 0, line)
+				except TypeError:
+					pass
+			self.need_redraw = False
 	
 	def move(self, relative=0, absolute=None):
 		i = self.scroll_begin