Merge lp:~osomon/software-center/close_in_progress into lp:software-center

Proposed by Olivier Tilloy
Status: Merged
Merged at revision: 903
Proposed branch: lp:~osomon/software-center/close_in_progress
Merge into: lp:software-center
Diff against target: 59 lines (+18/-0)
1 file modified
softwarecenter/view/viewswitcher.py (+18/-0)
To merge this branch: bzr merge lp:~osomon/software-center/close_in_progress
Reviewer Review Type Date Requested Status
software-store-developers code functional Pending
Review via email: mp+23605@code.launchpad.net

Description of the change

This branch is a proposed fix for bug #431907.

See https://bugs.launchpad.net/ubuntu/+source/software-center/+bug/431907/comments/7 for a rationale of the behaviour implemented.

I have performed some careful functional testing, but additional testing won't hurt, I may have overlooked some use cases.

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'softwarecenter/view/viewswitcher.py'
2--- softwarecenter/view/viewswitcher.py 2010-04-16 19:09:35 +0000
3+++ softwarecenter/view/viewswitcher.py 2010-04-17 09:15:29 +0000
4@@ -72,6 +72,12 @@
5 column.set_attributes(tr, markup=store.COL_NAME)
6 self.append_column(column)
7
8+ # Remember the previously selected permanent view
9+ self._permanent_views = (ViewSwitcherList.ACTION_ITEM_AVAILABLE,
10+ ViewSwitcherList.ACTION_ITEM_INSTALLED,
11+ ViewSwitcherList.ACTION_ITEM_CHANNEL)
12+ self._previous_permanent_view = None
13+
14 # set sensible atk name
15 atk_desc = self.get_accessible()
16 atk_desc.set_name(_("Software sources"))
17@@ -89,6 +95,7 @@
18 self.connect("cursor-changed", self.on_cursor_changed)
19
20 self.get_model().connect("channels-refreshed", self._on_channels_refreshed)
21+ self.get_model().connect("row-deleted", self._on_row_deleted)
22
23 def on_treeview_row_expanded(self, widget, iter, path):
24 # do nothing on a node expansion
25@@ -109,6 +116,8 @@
26 self.selected_channel_name = model[path][ViewSwitcherList.COL_NAME]
27 action = model[path][ViewSwitcherList.COL_ACTION]
28 channel = model[path][ViewSwitcherList.COL_CHANNEL]
29+ if action in self._permanent_views:
30+ self._previous_permanent_view = path
31 self.emit("view-changed", action, channel)
32
33 def get_view(self):
34@@ -125,9 +134,11 @@
35 if not path:
36 return None
37 return path[0]
38+
39 def set_view(self, action):
40 self.set_cursor((action,))
41 self.emit("view-changed", action, None)
42+
43 def on_motion_notify_event(self, widget, event):
44 #print "on_motion_notify_event: ", event
45 path = self.get_path_at_pos(int(event.x), int(event.y))
46@@ -161,6 +172,13 @@
47 if channel_iter_to_select:
48 self.set_cursor(model.get_path(channel_iter_to_select))
49
50+ def _on_row_deleted(self, widget, path):
51+ if self.get_cursor()[0] is None:
52+ # The view that was selected has been deleted, switch back to
53+ # the previously selected permanent view.
54+ if self._previous_permanent_view is not None:
55+ self.set_cursor(self._previous_permanent_view)
56+
57 class ViewSwitcherList(gtk.TreeStore):
58
59 # columns