Merge lp:~kalgasnik/lightdm-gtk-greeter/user_switching into lp:~lightdm-gtk-greeter-team/lightdm-gtk-greeter/trunk

Proposed by Andrew P.
Status: Merged
Merged at revision: 156
Proposed branch: lp:~kalgasnik/lightdm-gtk-greeter/user_switching
Merge into: lp:~lightdm-gtk-greeter-team/lightdm-gtk-greeter/trunk
Diff against target: 103 lines (+68/-0)
2 files modified
src/lightdm-gtk-greeter.c (+67/-0)
src/lightdm-gtk-greeter.glade (+1/-0)
To merge this branch: bzr merge lp:~kalgasnik/lightdm-gtk-greeter/user_switching
Reviewer Review Type Date Requested Status
LightDM Gtk+ Greeter Development Team Pending
Review via email: mp+197338@code.launchpad.net

Description of the change

username_entry/password_entry: Up/Down keys change user selection.

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 'src/lightdm-gtk-greeter.c'
2--- src/lightdm-gtk-greeter.c 2013-11-30 18:48:31 +0000
3+++ src/lightdm-gtk-greeter.c 2013-12-02 10:25:43 +0000
4@@ -752,6 +752,63 @@
5 }
6
7 gboolean
8+password_key_press_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data);
9+G_MODULE_EXPORT
10+gboolean
11+password_key_press_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
12+{
13+#if GTK_CHECK_VERSION (3, 0, 0)
14+ if ((event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_Down) &&
15+ gtk_widget_get_visible(GTK_WIDGET(user_combo)))
16+#else
17+ if ((event->keyval == GDK_Up || event->keyval == GDK_Down) &&
18+ gtk_widget_get_visible(GTK_WIDGET(user_combo)))
19+#endif
20+ {
21+ gboolean up;
22+ gboolean available;
23+ GtkTreeIter iter;
24+ GtkTreeModel *model = gtk_combo_box_get_model (user_combo);
25+ #if GTK_CHECK_VERSION (3, 0, 0)
26+ up = event->keyval == GDK_KEY_Up;
27+ #else
28+ up = event->keyval == GDK_Up;
29+ #endif
30+
31+ /* Back to username_entry if it is available */
32+ if (up && gtk_widget_get_visible (GTK_WIDGET (username_entry)) && widget == GTK_WIDGET (password_entry))
33+ {
34+ gtk_widget_grab_focus (GTK_WIDGET (username_entry));
35+ return TRUE;
36+ }
37+
38+ if (!gtk_combo_box_get_active_iter (user_combo, &iter))
39+ return FALSE;
40+
41+ if (up)
42+ {
43+ #if GTK_CHECK_VERSION (3, 0, 0)
44+ available = gtk_tree_model_iter_previous (model, &iter);
45+ #else
46+ GtkTreePath *path = gtk_tree_model_get_path (model, &iter);
47+ available = gtk_tree_path_prev (path);
48+ if (available)
49+ available = gtk_tree_model_get_iter (model, &iter, path);
50+ gtk_tree_path_free (path);
51+ #endif
52+ }
53+ else
54+ available = gtk_tree_model_iter_next (model, &iter);
55+
56+ if (available)
57+ gtk_combo_box_set_active_iter (user_combo, &iter);
58+
59+ return TRUE;
60+ }
61+ return FALSE;
62+}
63+
64+gboolean
65 username_focus_out_cb (GtkWidget *widget, GdkEvent *event, gpointer user_data);
66 G_MODULE_EXPORT
67 gboolean
68@@ -793,6 +850,15 @@
69 }
70 return TRUE;
71 }
72+#if GTK_CHECK_VERSION (3, 0, 0)
73+ else if (event->keyval == GDK_KEY_Up)
74+#else
75+ else if (event->keyval == GDK_Up)
76+#endif
77+ {
78+ /* Acts as password_entry */
79+ return password_key_press_cb (widget, event, user_data);
80+ }
81 return FALSE;
82 }
83
84@@ -892,6 +958,7 @@
85 {
86 gtk_widget_hide (GTK_WIDGET (username_entry));
87 gtk_widget_hide (GTK_WIDGET (cancel_button));
88+ gtk_widget_grab_focus (GTK_WIDGET (password_entry));
89 }
90
91 set_login_button_label (greeter, user);
92
93=== modified file 'src/lightdm-gtk-greeter.glade'
94--- src/lightdm-gtk-greeter.glade 2013-11-28 16:22:36 +0000
95+++ src/lightdm-gtk-greeter.glade 2013-12-02 10:25:43 +0000
96@@ -65,6 +65,7 @@
97 <property name="primary_icon_activatable">False</property>
98 <property name="secondary_icon_activatable">False</property>
99 <signal name="activate" handler="login_cb" swapped="no"/>
100+ <signal name="key-press-event" handler="password_key_press_cb" swapped="no"/>
101 </object>
102 <packing>
103 <property name="left_attach">1</property>

Subscribers

People subscribed via source and target branches