Merge lp:~davidgomes/slingshot/category-pages-keyboard into lp:~elementary-pantheon/slingshot/trunk
- category-pages-keyboard
- Merge into trunk
Proposed by
David Gomes
Status: | Merged |
---|---|
Merged at revision: | 117 |
Proposed branch: | lp:~davidgomes/slingshot/category-pages-keyboard |
Merge into: | lp:~elementary-pantheon/slingshot/trunk |
Diff against target: |
398 lines (+168/-41) 3 files modified
src/SlingshotView.vala (+75/-11) src/Utils.vala (+15/-15) src/Widgets/CategoryView.vala (+78/-15) |
To merge this branch: | bzr merge lp:~davidgomes/slingshot/category-pages-keyboard |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Giulio Collura (community) | Approve | ||
Review via email: mp+81775@code.launchpad.net |
Commit message
Description of the change
Added many new keyboard functions to Category View:
- Up and Down to change category (when possible);
- Right and Left to change page (when possible);
- 1, 2, 3 (keyboard numbers) to change page (when possible);
The code is quite stable and I haven't had any problems, so I think it's ready for merging.
To post a comment you must log in.
- 113. By David Gomes
-
Removed tabs mixed with space
- 114. By David Gomes
-
Added animation to change page (right and left) in Category View. This animation should not be called when changing category
- 115. By David Gomes
-
Fixed a bug related to changing page when changing Category
Revision history for this message
Giulio Collura (gcollura) : | # |
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'src/SlingshotView.vala' |
2 | --- src/SlingshotView.vala 2011-11-06 20:45:11 +0000 |
3 | +++ src/SlingshotView.vala 2011-11-11 18:37:27 +0000 |
4 | @@ -256,7 +256,11 @@ |
5 | if (modality == Modality.NORMAL_VIEW) |
6 | page_switcher.set_active (0); |
7 | else |
8 | - return base.key_press_event (event); |
9 | + if (category_view.app_view.get_n_pages () > 1 && |
10 | + category_view.switcher.active != 0) |
11 | + category_view.set_active_page (0); |
12 | + else |
13 | + return base.key_press_event (event); |
14 | break; |
15 | |
16 | case "2": |
17 | @@ -264,7 +268,13 @@ |
18 | if (modality == Modality.NORMAL_VIEW) |
19 | page_switcher.set_active (1); |
20 | else |
21 | - return base.key_press_event (event); |
22 | + { |
23 | + if (category_view.app_view.get_n_pages () > 1 && |
24 | + category_view.switcher.active != 1) |
25 | + category_view.set_active_page (1); |
26 | + else |
27 | + return base.key_press_event (event); |
28 | + } |
29 | break; |
30 | |
31 | case "3": |
32 | @@ -272,7 +282,11 @@ |
33 | if (modality == Modality.NORMAL_VIEW) |
34 | page_switcher.set_active (2); |
35 | else |
36 | - return base.key_press_event (event); |
37 | + if (category_view.app_view.get_n_pages () > 1 && |
38 | + category_view.switcher.active != 2) |
39 | + category_view.set_active_page (2); |
40 | + else |
41 | + return base.key_press_event (event); |
42 | break; |
43 | |
44 | case "4": |
45 | @@ -280,7 +294,11 @@ |
46 | if (modality == Modality.NORMAL_VIEW) |
47 | page_switcher.set_active (3); |
48 | else |
49 | - return base.key_press_event (event); |
50 | + if (category_view.app_view.get_n_pages () > 1 && |
51 | + category_view.switcher.active != 3) |
52 | + category_view.set_active_page (3); |
53 | + else |
54 | + return base.key_press_event (event); |
55 | break; |
56 | |
57 | case "5": |
58 | @@ -288,7 +306,11 @@ |
59 | if (modality == Modality.NORMAL_VIEW) |
60 | page_switcher.set_active (4); |
61 | else |
62 | - return base.key_press_event (event); |
63 | + if (category_view.app_view.get_n_pages () > 1 && |
64 | + category_view.switcher.active != 4) |
65 | + category_view.set_active_page (4); |
66 | + else |
67 | + return base.key_press_event (event); |
68 | break; |
69 | |
70 | case "6": |
71 | @@ -296,7 +318,11 @@ |
72 | if (modality == Modality.NORMAL_VIEW) |
73 | page_switcher.set_active (5); |
74 | else |
75 | - return base.key_press_event (event); |
76 | + if (category_view.app_view.get_n_pages () > 1 && |
77 | + category_view.switcher.active != 5) |
78 | + category_view.set_active_page (5); |
79 | + else |
80 | + return base.key_press_event (event); |
81 | break; |
82 | |
83 | case "7": |
84 | @@ -304,7 +330,11 @@ |
85 | if (modality == Modality.NORMAL_VIEW) |
86 | page_switcher.set_active (6); |
87 | else |
88 | - return base.key_press_event (event); |
89 | + if (category_view.app_view.get_n_pages () > 1 && |
90 | + category_view.switcher.active != 6) |
91 | + category_view.set_active_page (6); |
92 | + else |
93 | + return base.key_press_event (event); |
94 | break; |
95 | |
96 | case "8": |
97 | @@ -312,7 +342,11 @@ |
98 | if (modality == Modality.NORMAL_VIEW) |
99 | page_switcher.set_active (7); |
100 | else |
101 | - return base.key_press_event (event); |
102 | + if (category_view.app_view.get_n_pages () > 1 && |
103 | + category_view.switcher.active != 7) |
104 | + category_view.set_active_page (7); |
105 | + else |
106 | + return base.key_press_event (event); |
107 | break; |
108 | |
109 | case "9": |
110 | @@ -320,7 +354,11 @@ |
111 | if (modality == Modality.NORMAL_VIEW) |
112 | page_switcher.set_active (8); |
113 | else |
114 | - return base.key_press_event (event); |
115 | + if (category_view.app_view.get_n_pages () > 1 && |
116 | + category_view.switcher.active != 8) |
117 | + category_view.set_active_page (8); |
118 | + else |
119 | + return base.key_press_event (event); |
120 | break; |
121 | |
122 | case "0": |
123 | @@ -328,10 +366,20 @@ |
124 | if (modality == Modality.NORMAL_VIEW) |
125 | page_switcher.set_active (9); |
126 | else |
127 | - return base.key_press_event (event); |
128 | + if (category_view.app_view.get_n_pages () > 1 && |
129 | + category_view.switcher.active != 9) |
130 | + category_view.set_active_page (9); |
131 | + else |
132 | + return base.key_press_event (event); |
133 | break; |
134 | |
135 | case "Left": |
136 | + if (modality == Modality.CATEGORY_VIEW && |
137 | + category_view.app_view.get_n_pages () > 1) |
138 | + { |
139 | + category_view.set_active_page (category_view.switcher.active - 1); |
140 | + break; |
141 | + } |
142 | if (modality == Modality.NORMAL_VIEW) |
143 | page_switcher.set_active (page_switcher.active - 1); |
144 | else |
145 | @@ -339,6 +387,12 @@ |
146 | break; |
147 | |
148 | case "Right": |
149 | + if (modality == Modality.CATEGORY_VIEW && |
150 | + category_view.app_view.get_n_pages () > 1) |
151 | + { |
152 | + category_view.set_active_page (category_view.switcher.active + 1); |
153 | + break; |
154 | + } |
155 | if (modality == Modality.NORMAL_VIEW) |
156 | page_switcher.set_active (page_switcher.active + 1); |
157 | else |
158 | @@ -346,6 +400,10 @@ |
159 | break; |
160 | |
161 | case "Up": |
162 | + if (modality == Modality.CATEGORY_VIEW) { |
163 | + category_view.category_switcher.selected--; |
164 | + } |
165 | + |
166 | if (modality == Modality.SEARCH_VIEW) { |
167 | search_view.selected--; |
168 | search_view_up (); |
169 | @@ -353,6 +411,10 @@ |
170 | break; |
171 | |
172 | case "Down": |
173 | + if (modality == Modality.CATEGORY_VIEW) { |
174 | + category_view.category_switcher.selected++; |
175 | + } |
176 | + |
177 | if (modality == Modality.SEARCH_VIEW) |
178 | search_view.selected++; |
179 | if (search_view.selected > 7) |
180 | @@ -402,7 +464,7 @@ |
181 | hide (); |
182 | |
183 | // grab_remove ((Widget) this); |
184 | - // get_current_event_device ().ungrab (Gdk.CURRENT_TIME); |
185 | + // get_current_event_device ().ungrab (Gdk.CURRENT_TIME); |
186 | |
187 | } |
188 | |
189 | @@ -414,6 +476,8 @@ |
190 | |
191 | present (); |
192 | searchbar.grab_focus (); |
193 | + this.focus (0); |
194 | + |
195 | //Utils.present_window (this); |
196 | |
197 | } |
198 | |
199 | === modified file 'src/Utils.vala' |
200 | --- src/Utils.vala 2011-10-11 21:00:56 +0000 |
201 | +++ src/Utils.vala 2011-11-11 18:37:27 +0000 |
202 | @@ -23,21 +23,21 @@ |
203 | namespace Slingshot { |
204 | |
205 | class Utils : GLib.Object { |
206 | - |
207 | - public static Alignment set_padding (Gtk.Widget widget, int top, int right, |
208 | - int bottom, int left) { |
209 | - |
210 | - var alignment = new Alignment (0.0f, 0.0f, 1.0f, 1.0f); |
211 | - alignment.top_padding = top; |
212 | - alignment.right_padding = right; |
213 | - alignment.bottom_padding = bottom; |
214 | - alignment.left_padding = left; |
215 | - |
216 | - alignment.add (widget); |
217 | - return alignment; |
218 | - |
219 | - } |
220 | - |
221 | + |
222 | + public static Alignment set_padding (Gtk.Widget widget, int top, |
223 | + int right, int bottom, int left) { |
224 | + |
225 | + var alignment = new Alignment (0.0f, 0.0f, 1.0f, 1.0f); |
226 | + alignment.top_padding = top; |
227 | + alignment.right_padding = right; |
228 | + alignment.bottom_padding = bottom; |
229 | + alignment.left_padding = left; |
230 | + |
231 | + alignment.add (widget); |
232 | + return alignment; |
233 | + |
234 | + } |
235 | + |
236 | public static string truncate_text (string input, int icon_size) { |
237 | |
238 | string new_text; |
239 | |
240 | === modified file 'src/Widgets/CategoryView.vala' |
241 | --- src/Widgets/CategoryView.vala 2011-11-06 20:45:11 +0000 |
242 | +++ src/Widgets/CategoryView.vala 2011-11-11 18:37:27 +0000 |
243 | @@ -26,10 +26,10 @@ |
244 | public class CategoryView : EventBox { |
245 | |
246 | private HBox container; |
247 | - private Sidebar category_switcher; |
248 | - private Widgets.Grid app_view; |
249 | + public Sidebar category_switcher; |
250 | + public Widgets.Grid app_view; |
251 | private Layout layout; |
252 | - private Switcher switcher; |
253 | + public Switcher switcher; |
254 | private SlingshotView view; |
255 | private Label empty_cat_label; |
256 | |
257 | @@ -40,6 +40,8 @@ |
258 | private const string NEW_FILTER = _("Create a new Filter"); |
259 | private int current_position = 0; |
260 | |
261 | + private bool from_category = false; |
262 | + |
263 | public CategoryView (SlingshotView parent) { |
264 | |
265 | view = parent; |
266 | @@ -105,7 +107,7 @@ |
267 | show_filtered_apps (category); |
268 | |
269 | }); |
270 | - |
271 | + |
272 | layout.scroll_event.connect ((event) => { |
273 | switch (event.direction.to_string ()) { |
274 | case "GDK_SCROLL_UP": |
275 | @@ -124,19 +126,42 @@ |
276 | if (switcher.size == 0) |
277 | switcher.append ("1"); |
278 | switcher.append (page); |
279 | + |
280 | + /* Prevents pages from changing */ |
281 | + from_category = true; |
282 | }); |
283 | |
284 | switcher.active_changed.connect (() => { |
285 | |
286 | - if (switcher.active > switcher.old_active) |
287 | + if (from_category) { |
288 | + from_category = false; |
289 | + return; |
290 | + } |
291 | + |
292 | + if (switcher.active > switcher.old_active) { |
293 | page_right (switcher.active - switcher.old_active); |
294 | + } |
295 | else |
296 | + { |
297 | page_left (switcher.old_active - switcher.active); |
298 | - |
299 | + } |
300 | }); |
301 | |
302 | } |
303 | |
304 | + public void set_active_page (int page) { |
305 | + |
306 | + if (page > switcher.active) |
307 | + { |
308 | + switcher.set_active (page); |
309 | + } |
310 | + if (page < switcher.active) |
311 | + { |
312 | + switcher.set_active (page); |
313 | + } |
314 | + |
315 | + } |
316 | + |
317 | private void add_app (App app) { |
318 | |
319 | var app_entry = new AppEntry (app); |
320 | @@ -192,31 +217,69 @@ |
321 | |
322 | } |
323 | |
324 | - private void page_left (int step = 1) { |
325 | + public int page_left (int step = 1) { |
326 | |
327 | int columns = app_view.get_page_columns (); |
328 | |
329 | if (current_position < 0) { |
330 | - |
331 | + int count = 0; |
332 | + int val = columns*130*step / 10; |
333 | + Timeout.add (20 / (step*step*2), () => { |
334 | + |
335 | + if (count >= columns*130*step) { |
336 | + count = 0; |
337 | + return false; |
338 | + } |
339 | + layout.move (app_view, current_position + val, 0); |
340 | + current_position += val; |
341 | + count += val; |
342 | + return true; |
343 | + |
344 | + }, Priority.DEFAULT_IDLE); |
345 | + /* |
346 | layout.move (app_view, current_position + columns*130*step, 0); |
347 | - current_position += columns*130*step; |
348 | - |
349 | + return current_position += columns*130*step; |
350 | + */ |
351 | } |
352 | |
353 | + return 0; |
354 | } |
355 | |
356 | - private void page_right (int step = 1) { |
357 | - |
358 | + public int page_right (int step = 1) { |
359 | + |
360 | + int columns = app_view.get_page_columns (); |
361 | + int pages = app_view.get_n_pages (); |
362 | + |
363 | + if ((- current_position) < (columns*(pages - 1)*130)) { |
364 | + int count = 0; |
365 | + int val = columns*130*step / 10; |
366 | + Timeout.add(20 / (2*step*step), () => { |
367 | + |
368 | + if (count >= columns*130*step) { |
369 | + count = 0; |
370 | + return false; |
371 | + } |
372 | + |
373 | + layout.move (app_view, current_position - val, 0); |
374 | + current_position -= val; |
375 | + count += val; |
376 | + return true; |
377 | + |
378 | + }, Priority.DEFAULT_IDLE); |
379 | + } |
380 | + |
381 | + /* |
382 | int columns = app_view.get_page_columns (); |
383 | int pages = app_view.get_n_pages (); |
384 | |
385 | if ((- current_position) < (columns*(pages - 1)*130)) { |
386 | |
387 | layout.move (app_view, current_position - columns*130*step, 0); |
388 | - current_position -= columns*130*step; |
389 | - |
390 | - } |
391 | + return current_position -= columns*130*step; |
392 | + |
393 | + }*/ |
394 | |
395 | + return 0; |
396 | } |
397 | |
398 | public void show_page_switcher (bool show) { |