[kupfer: 17/38] commatrick: Consistent object stack API across panes
- From: Ulrik Sverdrup <usverdrup src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [kupfer: 17/38] commatrick: Consistent object stack API across panes
- Date: Sat, 16 Jan 2010 17:13:13 +0000 (UTC)
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]