Merge lp:~davidgomes/slingshot/category-pages-keyboard into lp:~elementary-pantheon/slingshot/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
Reviewer Review Type Date Requested Status
Giulio Collura (community) Approve
Review via email: mp+81775@code.launchpad.net

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) {

Subscribers

People subscribed via source and target branches