[kupfer: 17/38] commatrick: Consistent object stack API across panes



commit 2bbe47358ebe161b998ab766ce08470e7299ccd5
Author: Ulrik Sverdrup <ulrik sverdrup gmail com>
Date:   Fri Jan 15 17:36:17 2010 +0100

    commatrick: Consistent object stack API across panes
    
    We make the object stack API more pane-agnostic, so that the fronend
    handles everything the same way. The data backend however, simply
    ignores the object stack for every pane except the first.

 kupfer/core/data.py  |   42 ++++++++++++++++++++++++++++--------------
 kupfer/ui/browser.py |   20 ++++++++++----------
 2 files changed, 38 insertions(+), 24 deletions(-)
---
diff --git a/kupfer/core/data.py b/kupfer/core/data.py
index 88e58c9..509ca8d 100644
--- a/kupfer/core/data.py
+++ b/kupfer/core/data.py
@@ -735,7 +735,7 @@ class DataController (gobject.GObject, pretty.OutputMixin):
 			self._insert_object(SourcePane, ret)
 		else:
 			return
-		self.object_stack_clear()
+		self.object_stack_clear_all()
 		self.emit("command-result", result_type)
 
 	def find_object(self, url):
@@ -750,7 +750,7 @@ class DataController (gobject.GObject, pretty.OutputMixin):
 		leaf, action, iobj = self._get_current_command_objects()
 		if leaf is None:
 			return
-		self.object_stack_clear()
+		self.object_stack_clear_all()
 		obj = compose.ComposedLeaf(leaf, action, iobj)
 		self._insert_object(SourcePane, obj)
 
@@ -782,24 +782,38 @@ class DataController (gobject.GObject, pretty.OutputMixin):
 			iobjects = None
 		return (objects, action, iobjects)
 
-	def object_stack_push(self, object_):
+	def object_stack_push(self, pane, object_):
 		"""
 		Push @object_ onto the stack
 		"""
-		self.source_pane.object_stack_push(object_)
-		self.emit("object-stack-changed", SourcePane)
+		if pane == SourcePane:
+			self.source_pane.object_stack_push(object_)
+			self.emit("object-stack-changed", SourcePane)
+			return True
 
-	def object_stack_pop(self):
-		obj = self.source_pane.object_stack_pop()
-		self._insert_object(SourcePane, obj)
-		self.emit("object-stack-changed", SourcePane)
+	def object_stack_pop(self, pane):
+		if pane == SourcePane:
+			obj = self.source_pane.object_stack_pop()
+			self._insert_object(SourcePane, obj)
+			self.emit("object-stack-changed", SourcePane)
+			return True
 
-	def object_stack_clear(self):
-		self.source_pane.object_stack[:] = []
-		self.emit("object-stack-changed", SourcePane)
+	def object_stack_clear(self, pane):
+		if pane == SourcePane:
+			self.source_pane.object_stack[:] = []
+			self.emit("object-stack-changed", SourcePane)
+
+	def object_stack_clear_all(self):
+		"""
+		Clear the object stack for all panes
+		"""
+		for pane in self._panectl_table:
+			self.object_stack_clear(pane)
 
-	def get_object_stack(self):
-		return self.source_pane.object_stack
+	def get_object_stack(self, pane):
+		if pane == SourcePane:
+			return self.source_pane.object_stack
+		return ()
 
 # pane cleared or set with new item
 # pane, item
diff --git a/kupfer/ui/browser.py b/kupfer/ui/browser.py
index 0abe9a7..1048273 100644
--- a/kupfer/ui/browser.py
+++ b/kupfer/ui/browser.py
@@ -942,9 +942,10 @@ class Interface (gobject.GObject):
 				keyv = key_book["Right"]
 			elif keyv == ord(",") and has_selection:
 				cur = self.current.get_current()
-				self.data_controller.object_stack_push(cur)
-				self._relax_search_terms()
-				return True
+				curpane = self._pane_for_widget(self.current)
+				if self.data_controller.object_stack_push(curpane, cur):
+					self._relax_search_terms()
+					return True
 			elif keyv in init_text_keys:
 				if self.try_enable_text_mode():
 					# swallow if it is the direct key
@@ -1056,7 +1057,7 @@ class Interface (gobject.GObject):
 		self.switch_to_source()
 		while self._browse_up():
 			pass
-		self.data_controller.object_stack_clear()
+		self.data_controller.object_stack_clear_all()
 		self.reset_current()
 		self.reset()
 
@@ -1084,8 +1085,7 @@ class Interface (gobject.GObject):
 			else:
 				self.reset_current()
 		else:
-			if self.current == self.search:
-				self.data_controller.object_stack_clear()
+			self.data_controller.object_stack_clear(self._pane_for_widget(self.current))
 			if self.get_in_text_mode():
 				self.toggle_text_mode(False)
 			elif not self.current.get_table_visible():
@@ -1096,9 +1096,9 @@ class Interface (gobject.GObject):
 
 	def _backspace_key_press(self):
 		# backspace: delete from stack
-		if (self.current == self.search and
-				self.data_controller.get_object_stack()):
-			self.data_controller.object_stack_pop()
+		pane = self._pane_for_widget(self.current)
+		if self.data_controller.get_object_stack(pane):
+			self.data_controller.object_stack_pop(pane)
 			self.reset_text()
 			return
 		self._back_key_press()
@@ -1325,7 +1325,7 @@ class Interface (gobject.GObject):
 		Stack of objects (for comma trick) changed in @pane
 		"""
 		wid = self._widget_for_pane(pane)
-		wid.set_object_stack(controller.get_object_stack())
+		wid.set_object_stack(controller.get_object_stack(pane))
 
 	def _selection_changed(self, widget, match):
 		pane = self._pane_for_widget(widget)



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