Merge lp:~mmcg069/software-center/Bug888463 into lp:software-center

Proposed by Matthew McGowan
Status: Merged
Merged at revision: 2554
Proposed branch: lp:~mmcg069/software-center/Bug888463
Merge into: lp:software-center
Diff against target: 103 lines (+30/-17)
1 file modified
softwarecenter/ui/gtk3/widgets/apptreeview.py (+30/-17)
To merge this branch: bzr merge lp:~mmcg069/software-center/Bug888463
Reviewer Review Type Date Requested Status
Gary Lasker (community) Approve
Michael Vogt Pending
Review via email: mp+81820@code.launchpad.net

Description of the change

A possible fix for Bug#888463.

Rows outside of the visible range do not currently get their height property updated when requested. Overcome this by checking if row is not in visible range when height update requested; if true, store the row for a time when it re-enters the visible range, and only then process the height update.

To post a comment you must log in.
Revision history for this message
Gary Lasker (gary-lasker) wrote :

Does the trick, thanks Matt!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'softwarecenter/ui/gtk3/widgets/apptreeview.py'
--- softwarecenter/ui/gtk3/widgets/apptreeview.py 2011-11-09 10:09:16 +0000
+++ softwarecenter/ui/gtk3/widgets/apptreeview.py 2011-11-10 09:50:26 +0000
@@ -18,8 +18,8 @@
18from softwarecenter.backend import get_install_backend18from softwarecenter.backend import get_install_backend
19from softwarecenter.netstatus import (get_network_watcher,19from softwarecenter.netstatus import (get_network_watcher,
20 network_state_is_connected)20 network_state_is_connected)
21from softwarecenter.ui.gtk3.models.appstore2 import (AppGenericStore,21from softwarecenter.ui.gtk3.models.appstore2 import (
22 CategoryRowReference)22 AppGenericStore, CategoryRowReference)
2323
2424
25class AppTreeView(Gtk.TreeView):25class AppTreeView(Gtk.TreeView):
@@ -43,6 +43,7 @@
43 self.pressed = False43 self.pressed = False
44 self.focal_btn = None44 self.focal_btn = None
45 self._action_block_list = []45 self._action_block_list = []
46 self._needs_collapse = []
46 self.expanded_path = None47 self.expanded_path = None
4748
48 #~ # if this hacked mode is available everything will be fast49 #~ # if this hacked mode is available everything will be fast
@@ -126,24 +127,32 @@
126 if vadjustment:127 if vadjustment:
127 vadjustment.set_value(0)128 vadjustment.set_value(0)
128 self.expanded_path = None129 self.expanded_path = None
130 self._needs_collapse = []
129 if self.appmodel:131 if self.appmodel:
130 self.appmodel.clear()132 self.appmodel.clear()
131133
132 def expand_path(self, path):134 def expand_path(self, path):
133 if path is not None and not isinstance(path, Gtk.TreePath):135 if path is not None and not isinstance(path, Gtk.TreePath):
134 raise TypeError, "Expects Gtk.TreePath or None, got %s" % type(path)136 raise TypeError, ("Expects Gtk.TreePath or None, got %s" %
137 type(path))
135138
136 model = self.get_model()139 model = self.get_model()
137 old = self.expanded_path140 old = self.expanded_path
138 self.expanded_path = path141 self.expanded_path = path
139142
140 if old is not None:143 if old is not None:
141 try:144 ok, start, end = self.get_visible_range()
142 # lazy solution to Bug #846204145 if (ok and start.compare(old) != -1 or
143 model.row_changed(old, model.get_iter(old))146 end.compare(old) != 1):
144 except:147 self._needs_collapse.append(old)
145 msg = "apptreeview.expand_path: Supplied 'old' path is an invalid tree path: '%s'" % old148 else:
146 logging.debug(msg)149 try: # try... a lazy solution to Bug #846204
150 model.row_changed(old, model.get_iter(old))
151 except:
152 msg = ("apptreeview.expand_path: Supplied 'old' "
153 "path is an invalid tree path: '%s'" % old)
154 logging.debug(msg)
155
147 if path == None: return156 if path == None: return
148157
149 model.row_changed(path, model.get_iter(path))158 model.row_changed(path, model.get_iter(path))
@@ -313,8 +322,8 @@
313 else:322 else:
314 action_btn.set_state(Gtk.StateFlags.NORMAL)323 action_btn.set_state(Gtk.StateFlags.NORMAL)
315324
316 #~ self.emit("application-selected", self.appmodel.get_application(app))325 self.app_view.emit(
317 self.app_view.emit("application-selected", self.appmodel.get_application(app))326 "application-selected", self.appmodel.get_application(app))
318 return False327 return False
319328
320 def _on_row_activated(self, view, path, column, tr):329 def _on_row_activated(self, view, path, column, tr):
@@ -456,8 +465,16 @@
456 indices = path.get_indices()465 indices = path.get_indices()
457 model.load_range(indices, 5)466 model.load_range(indices, 5)
458467
459 is_active = path == self.expanded_path468 if path in self._needs_collapse:
460 cell.set_property('isactive', is_active)469 # collapse rows that were outside the visible range and
470 # thus not immediately collapsed when expand_path was called
471 cell.set_property('isactive', False)
472 i = self._needs_collapse.index(path)
473 del self._needs_collapse[i]
474 model.row_changed(path, it)
475 return
476
477 cell.set_property('isactive', path == self.expanded_path)
461 return478 return
462479
463 def _app_activated_cb(self, btn, btn_id, app, store, path):480 def _app_activated_cb(self, btn, btn_id, app, store, path):
@@ -561,10 +578,6 @@
561 return self.get_path_at_pos(x, y)[0] == self.get_cursor()[0]578 return self.get_path_at_pos(x, y)[0] == self.get_cursor()[0]
562579
563580
564
565
566
567
568def get_query_from_search_entry(search_term):581def get_query_from_search_entry(search_term):
569 if not search_term:582 if not search_term:
570 return xapian.Query("")583 return xapian.Query("")