about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--ranger/core/actions.py7
-rw-r--r--ranger/gui/widgets/browserview.py13
2 files changed, 18 insertions, 2 deletions
diff --git a/ranger/core/actions.py b/ranger/core/actions.py
index 235be620..a815b111 100644
--- a/ranger/core/actions.py
+++ b/ranger/core/actions.py
@@ -581,6 +581,7 @@ class Actions(FileManagerAware, EnvironmentAware, SettingsAware):
 			# self.previews['/tmp/foo.jpg'][(80, 24)] = "the content..."
 			# self.previews['/tmp/foo.jpg']['loading'] = False
 			# A -1 in tuples means "any"; (80, -1) = wid. of 80 and any hei.
+			# The key 'foundpreview' is added later. Values in (True, False)
 			try:
 				data = self.previews[path]
 			except:
@@ -600,6 +601,7 @@ class Actions(FileManagerAware, EnvironmentAware, SettingsAware):
 					exit = signal.process.poll()
 					content = signal.loader.stdout_buffer
 					content += signal.process.stdout.read()
+					data['foundpreview'] = True
 					if exit == 0:
 						data[(width, height)] = content
 					elif exit == 3:
@@ -608,8 +610,11 @@ class Actions(FileManagerAware, EnvironmentAware, SettingsAware):
 						data[(width, -1)] = content
 					elif exit == 5:
 						data[(-1, -1)] = content
+					elif exit == 1:
+						data[(-1, -1)] = None
+						data['foundpreview'] = False
 					else:
-						data[(-1, -1)] = None # XXX
+						data[(-1, -1)] = None
 					if self.env.cf.path == path:
 						self.ui.browser.pager.need_redraw = True
 						self.ui.browser.need_redraw = True
diff --git a/ranger/gui/widgets/browserview.py b/ranger/gui/widgets/browserview.py
index 142e7985..bbaee6a2 100644
--- a/ranger/gui/widgets/browserview.py
+++ b/ranger/gui/widgets/browserview.py
@@ -28,6 +28,7 @@ class BrowserView(Widget, DisplayableContainer):
 	draw_bookmarks = False
 	stretch_ratios = None
 	need_clear = False
+	old_collapse = False
 
 	def __init__(self, win, ratios, preview = True):
 		DisplayableContainer.__init__(self, win)
@@ -196,8 +197,18 @@ class BrowserView(Widget, DisplayableContainer):
 
 	def _collapse(self):
 		# Should the last column be cut off? (Because there is no preview)
-		return self.settings.collapse_preview and self.preview and \
+		result = self.settings.collapse_preview and self.preview and \
 			not self.columns[-1].has_preview() and self.stretch_ratios
+		if result:
+			return True
+		if self.columns[-1].target:
+			target = self.columns[-1].target
+			try:
+				result = not self.fm.previews[target.realpath]['foundpreview']
+			except:
+				return self.old_collapse
+		self.old_collapse = result
+		return result
 
 	def resize(self, y, x, hei, wid):
 		"""Resize all the columns according to the given ratio"""