Merge lp:~voldyman/pantheon-greeter/fix-1423227-1439636 into lp:~elementary-pantheon/pantheon-greeter/trunk

Proposed by Akshay Shekher
Status: Merged
Approved by: Cody Garver
Approved revision: 356
Merged at revision: 356
Proposed branch: lp:~voldyman/pantheon-greeter/fix-1423227-1439636
Merge into: lp:~elementary-pantheon/pantheon-greeter/trunk
Diff against target: 111 lines (+53/-14)
2 files modified
src/Authenticator.vala (+2/-3)
src/PantheonGreeter.vala (+51/-11)
To merge this branch: bzr merge lp:~voldyman/pantheon-greeter/fix-1423227-1439636
Reviewer Review Type Date Requested Status
Cody Garver (community) Approve
Review via email: mp+256728@code.launchpad.net

Commit message

Store and restore session state (lp:1423227 & lp:1439636)

Description of the change

Added the ability of the greeter to store state for the session and hence fixed storing the last user logged in issue.

To post a comment you must log in.
Revision history for this message
Cody Garver (codygarver) wrote :

:D

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/Authenticator.vala'
2--- src/Authenticator.vala 2015-01-17 06:55:55 +0000
3+++ src/Authenticator.vala 2015-04-18 06:33:42 +0000
4@@ -243,9 +243,8 @@
5 warning ("Got start_session without awaiting it.");
6 }
7 message (@"Starting session $(current_login.login_session)");
8- PantheonGreeter.instance.settings.set_string ("greeter",
9- "last-user",
10- current_login.login_name);
11+ PantheonGreeter.instance.set_greeter_state ("last-user",
12+ current_login.login_name);
13 try {
14 lightdm.start_session_sync (current_login.login_session);
15 } catch (Error e) {
16
17=== modified file 'src/PantheonGreeter.vala'
18--- src/PantheonGreeter.vala 2015-02-06 16:09:15 +0000
19+++ src/PantheonGreeter.vala 2015-04-18 06:33:42 +0000
20@@ -55,6 +55,8 @@
21
22 //public Settings settings { get; private set; }
23 public KeyFile settings;
24+ public KeyFile state;
25+ private string state_file;
26
27 public static PantheonGreeter instance { get; private set; }
28
29@@ -79,6 +81,22 @@
30 login_gateway = new LightDMGateway ();
31 }
32
33+ var state_dir = Path.build_filename (Environment.get_user_cache_dir (), "unity-greeter");
34+ DirUtils.create_with_parents (state_dir, 0775);
35+
36+ var xdg_seat = GLib.Environment.get_variable("XDG_SEAT");
37+ var state_file_name = xdg_seat != null && xdg_seat != "seat0" ? xdg_seat + "-state" : "state";
38+
39+ state_file = Path.build_filename (state_dir, state_file_name);
40+ state = new KeyFile ();
41+ try {
42+ state.load_from_file (state_file, KeyFileFlags.NONE);
43+ } catch (Error e) {
44+ if (!(e is FileError.NOENT)) {
45+ warning ("Failed to load state from %s: %s\n", state_file, e.message);
46+ }
47+ }
48+
49 settings = new KeyFile ();
50 try {
51 settings.load_from_file (Constants.CONF_DIR+"/pantheon-greeter.conf",
52@@ -198,19 +216,20 @@
53 greeterbox.animate (Clutter.AnimationMode.EASE_OUT_QUART, 250, opacity: 255);
54
55 message ("Selecting last used user...");
56- var last_user = "";
57- try {
58- last_user = settings.get_string ("greeter", "last-user");
59- } catch (Error e) {
60- warning (e.message);
61- }
62-
63- for (var i = 0; i < userlist.size; i++) {
64- if (userlist.get_user (i).name == last_user) {
65- userlist.current_user = userlist.get_user (i);
66- break;
67+
68+ var last_user = get_greeter_state ("last-user");
69+
70+ if (last_user == null) {
71+ warning ("last user not set");
72+ } else {
73+ for (var i = 0; i < userlist.size; i++) {
74+ if (userlist.get_user (i).name == last_user) {
75+ userlist.current_user = userlist.get_user (i);
76+ break;
77+ }
78 }
79 }
80+
81 if (userlist.current_user == null)
82 userlist.current_user = userlist.get_user (0);
83
84@@ -322,6 +341,27 @@
85
86 return false;
87 }
88+
89+ public string? get_greeter_state (string key) {
90+ try {
91+ return state.get_value ("greeter", key);
92+ } catch (Error e) {
93+ return null;
94+ }
95+ }
96+
97+ public void set_greeter_state (string key, string value) {
98+ state.set_value ("greeter", key, value);
99+ var data = state.to_data ();
100+
101+ try {
102+ FileUtils.set_contents (state_file, data);
103+ } catch (Error e) {
104+ warning ("Failed to write state: %s", e.message);
105+ }
106+ }
107+
108+
109 }
110
111 public static int main (string [] args) {

Subscribers

People subscribed via source and target branches