Merge lp:~kiwinote/software-center/remember-scroll-position into lp:software-center

Proposed by Kiwinote
Status: Merged
Merged at revision: 2771
Proposed branch: lp:~kiwinote/software-center/remember-scroll-position
Merge into: lp:software-center
Diff against target: 159 lines (+36/-5)
6 files modified
debian/changelog (+10/-2)
softwarecenter/ui/gtk3/app.py (+4/-2)
softwarecenter/ui/gtk3/panes/availablepane.py (+5/-0)
softwarecenter/ui/gtk3/panes/softwarepane.py (+5/-1)
softwarecenter/ui/gtk3/session/viewmanager.py (+7/-0)
softwarecenter/ui/gtk3/views/appview.py (+5/-0)
To merge this branch: bzr merge lp:~kiwinote/software-center/remember-scroll-position
Reviewer Review Type Date Requested Status
software-store-developers Pending
Review via email: mp+93412@code.launchpad.net

Description of the change

first change in this branch is to make the backspace key no longer trigger a navigation back as it has started to cause many many odd side effects, the possible workarounds to keep this behaviour all seem a bit messy but perhaps i can come up with something at a later stage

the main change is to remember the list position when eg going from a list to details back to the list again. after much experimentation the code in this branch seems to work fairly reasonably, but there are a few oddities, ie the restored scroll position isn't pixel perfect, but can vary by up to roughly one item height - despite reading the value and restoring that pixel perfect value.. also for some odd reason we need to restore the vadjustment value to both set_value and set_lower, otherwise it doesn't work..
the scroll position is only remembered in the available pane

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 'debian/changelog'
2--- debian/changelog 2012-02-16 13:40:21 +0000
3+++ debian/changelog 2012-02-16 14:35:00 +0000
4@@ -1,12 +1,20 @@
5-software-center (5.1.10) UNRELEASED; urgency=low
6+software-center (5.1.10) precise; urgency=low
7
8+ [ Michael Vogt ]
9 * revert again:
10 lp:~gary-lasker/software-center/temp-disable-lobby-recommendations-view
11 * softwarecenter/region.py:
12 - trivial change to make region tag prefix "iso3166::" to align
13 with the latest debtags upstream plans
14
15- -- Michael Vogt <michael.vogt@ubuntu.com> Thu, 16 Feb 2012 12:30:20 +0100
16+ [ Kiwinote ]
17+ * softwarecenter/ui/gtk3/app.py:
18+ - disable navigating back by pressing the backspace key because it has
19+ started showing dodgy side effects - use ctrl+[ or alt+LEFT instead
20+ * remember the scroll position when navigating back to a list view,
21+ this only works in the available pane (LP: #852763)
22+
23+ -- Kiwinote <kiwinote@gmail.com> Thu, 16 Feb 2012 14:08:17 +0000
24
25 software-center (5.1.9) precise; urgency=low
26
27
28=== modified file 'softwarecenter/ui/gtk3/app.py'
29--- softwarecenter/ui/gtk3/app.py 2012-02-16 11:30:57 +0000
30+++ softwarecenter/ui/gtk3/app.py 2012-02-16 14:35:00 +0000
31@@ -559,8 +559,10 @@
32 event.state == Gdk.ModifierType.CONTROL_MASK) or
33 ((event.keyval == Gdk.keyval_from_name("Left") or
34 event.keyval == Gdk.keyval_from_name("KP_Left")) and
35- event.state == Gdk.ModifierType.MOD1_MASK) or
36- event.keyval == Gdk.keyval_from_name("BackSpace")):
37+ event.state == Gdk.ModifierType.MOD1_MASK)):
38+ # using the backspace key to navigate back has been disabled as it
39+ # has started to show dodgy side effects which I can't figure how
40+ # to deal with
41 self.menuitem_view.activate()
42 if self.menuitem_go_back.get_sensitive():
43 self.menuitem_go_back.activate()
44
45=== modified file 'softwarecenter/ui/gtk3/panes/availablepane.py'
46--- softwarecenter/ui/gtk3/panes/availablepane.py 2012-01-19 16:39:15 +0000
47+++ softwarecenter/ui/gtk3/panes/availablepane.py 2012-02-16 14:35:00 +0000
48@@ -500,6 +500,7 @@
49 self.nonapps_visible = NonAppVisibility.ALWAYS_VISIBLE
50
51 vm = get_viewmanager()
52+ self.app_view.tree_view_scroll.get_vadjustment().set_value(0.0)
53
54 # yeah for special cases - as discussed on irc, mpt
55 # wants this to return to the category screen *if*
56@@ -572,6 +573,8 @@
57 header_strings = self._get_header_for_view_state(view_state)
58 self.app_view.set_header_labels(*header_strings)
59
60+ self.app_view.vadj = view_state.vadjustment
61+
62 self.refresh_apps()
63 self.cat_view.stop_carousels()
64 return True
65@@ -605,6 +608,8 @@
66 if view_state.search_term:
67 self._clear_search()
68
69+ self.app_view.vadj = view_state.vadjustment
70+
71 self.refresh_apps()
72 self.cat_view.stop_carousels()
73 return True
74
75=== modified file 'softwarecenter/ui/gtk3/panes/softwarepane.py'
76--- softwarecenter/ui/gtk3/panes/softwarepane.py 2012-02-15 15:40:41 +0000
77+++ softwarecenter/ui/gtk3/panes/softwarepane.py 2012-02-16 14:35:00 +0000
78@@ -64,7 +64,8 @@
79 'application': (type(None), Application),
80 'limit': (int,),
81 'filter': (type(None), AppFilter),
82- 'previous_purchases_query': (type(None), xapian.Query)
83+ 'previous_purchases_query': (type(None), xapian.Query),
84+ 'vadjustment': (float, ),
85 }
86
87 def __init__(self):
88@@ -76,6 +77,7 @@
89 self.limit = 0
90 self.filter = None
91 self.previous_purchases_query = None
92+ self.vadjustment = 0.0
93 return
94
95 def __setattr__(self, name, val):
96@@ -110,6 +112,7 @@
97 state.filter = self.filter.copy()
98 else:
99 state.filter = None
100+ state.vadjustment = self.vadjustment
101 return state
102
103 def reset(self):
104@@ -120,6 +123,7 @@
105 self.application = None
106 self.limit = 0
107 #~ self.filter = None
108+ self.vadjustment = 0.0
109 return
110
111 class SoftwarePane(Gtk.VBox, BasePane):
112
113=== modified file 'softwarecenter/ui/gtk3/session/viewmanager.py'
114--- softwarecenter/ui/gtk3/session/viewmanager.py 2012-01-12 19:16:29 +0000
115+++ softwarecenter/ui/gtk3/session/viewmanager.py 2012-02-16 14:35:00 +0000
116@@ -165,6 +165,13 @@
117 return self.navhistory.stack[-1]
118
119 def display_page(self, pane, page, view_state, callback=None):
120+ # if previous page is a list view, then store the scroll positions
121+ if self.navhistory.stack:
122+ ni = self.navhistory.stack[self.navhistory.stack.cursor]
123+ if ni.pane.is_applist_view_showing():
124+ v = ni.pane.app_view.tree_view_scroll.get_vadjustment()
125+ ni.view_state.vadjustment = v.get_value()
126+
127 if callback is None:
128 callback = pane.get_callback_for_page(page, view_state)
129
130
131=== modified file 'softwarecenter/ui/gtk3/views/appview.py'
132--- softwarecenter/ui/gtk3/views/appview.py 2011-10-26 12:19:26 +0000
133+++ softwarecenter/ui/gtk3/views/appview.py 2012-02-16 14:35:00 +0000
134@@ -92,6 +92,7 @@
135 self.tree_view_scroll.add(self.tree_view)
136
137 self.appcount = None
138+ self.vadj = 0.0
139
140 self.user_defined_sort_method = False
141 self._handler = self.sort_methods_combobox.connect(
142@@ -131,6 +132,7 @@
143
144 def on_sort_method_changed(self, *args):
145 self.user_defined_sort_method = True
146+ self.vadj = 0.0
147 self.emit("sort-method-changed", self.sort_methods_combobox)
148 return
149
150@@ -206,6 +208,9 @@
151 if model:
152 model.set_from_matches(matches)
153 self.user_defined_sort_method = False
154+
155+ self.tree_view_scroll.get_vadjustment().set_lower(self.vadj)
156+ self.tree_view_scroll.get_vadjustment().set_value(self.vadj)
157 return
158
159 def clear_model(self):

Subscribers

People subscribed via source and target branches