Merge lp:~kaihengfeng/unity-greeter/fix-resolution-changing into lp:unity-greeter

Proposed by Kai-Heng Feng
Status: Merged
Merged at revision: 1939
Proposed branch: lp:~kaihengfeng/unity-greeter/fix-resolution-changing
Merge into: lp:unity-greeter
Diff against target: 173 lines (+88/-44)
1 file modified
src/unity-greeter.vala (+88/-44)
To merge this branch: bzr merge lp:~kaihengfeng/unity-greeter/fix-resolution-changing
Reviewer Review Type Date Requested Status
Robert Ancell Approve
Review via email: mp+295923@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Robert Ancell (robert-ancell) wrote :

My system didn't explode after adding this so I merged it.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/unity-greeter.vala'
2--- src/unity-greeter.vala 2016-03-16 06:42:17 +0000
3+++ src/unity-greeter.vala 2016-05-27 09:27:16 +0000
4@@ -47,16 +47,15 @@
5 private static Timer log_timer;
6
7 private DialogDBusInterface dbus_object;
8+ private SettingsDaemonDBusInterface settings_daemon_proxy;
9+ public signal void xsettings_ready ();
10+ public signal void greeter_ready ();
11
12 private UnityGreeter (bool test_mode_)
13 {
14 singleton = this;
15 test_mode = test_mode_;
16
17- /* Prepare to set the background */
18- debug ("Creating background surface");
19- background_surface = create_root_surface (Gdk.Screen.get_default ());
20-
21 greeter = new LightDM.Greeter ();
22 greeter.show_message.connect ((text, type) => { show_message (text, type); });
23 greeter.show_prompt.connect ((text, type) => { show_prompt (text, type); });
24@@ -98,44 +97,32 @@
25 warning ("Failed to load state from %s: %s\n", state_file, e.message);
26 }
27
28- main_window = new MainWindow ();
29-
30- Bus.own_name (BusType.SESSION, "com.canonical.UnityGreeter", BusNameOwnerFlags.NONE);
31-
32- dbus_object = new DialogDBusInterface ();
33- dbus_object.open_dialog.connect ((type) =>
34- {
35- ShutdownDialogType dialog_type;
36- switch (type)
37- {
38- default:
39- case 1:
40- dialog_type = ShutdownDialogType.LOGOUT;
41- break;
42- case 2:
43- dialog_type = ShutdownDialogType.RESTART;
44- break;
45- }
46- main_window.show_shutdown_dialog (dialog_type);
47- });
48- dbus_object.close_dialog.connect ((type) => { main_window.close_shutdown_dialog (); });
49- Bus.own_name (BusType.SESSION, "com.canonical.Unity", BusNameOwnerFlags.NONE,
50- (c) =>
51- {
52- try
53- {
54- c.register_object ("/org/gnome/SessionManager/EndSessionDialog", dbus_object);
55- }
56- catch (Error e)
57- {
58- warning ("Failed to register /org/gnome/SessionManager/EndSessionDialog: %s", e.message);
59- }
60- },
61- null,
62- () => debug ("Failed to acquire name com.canonical.Unity"));
63-
64- start_fake_wm ();
65- Gdk.threads_add_idle (ready_cb);
66+ /* Render things after xsettings is ready */
67+ xsettings_ready.connect ( xsettings_ready_cb );
68+
69+ GLib.Bus.watch_name (BusType.SESSION, "org.gnome.SettingsDaemon", BusNameWatcherFlags.NONE,
70+ (c, name, owner) =>
71+ {
72+ try {
73+ settings_daemon_proxy = GLib.Bus.get_proxy_sync (
74+ BusType.SESSION, "org.gnome.SettingsDaemon", "/org/gnome/SettingsDaemon");
75+ settings_daemon_proxy.plugin_activated.connect (
76+ (name) =>
77+ {
78+ if (name == "xsettings") {
79+ debug ("xsettings is ready");
80+ xsettings_ready ();
81+ }
82+ }
83+ );
84+ }
85+ catch (Error e)
86+ {
87+ debug ("Failed to get USD proxy, proceed anyway");
88+ xsettings_ready ();
89+ }
90+ },
91+ null);
92 }
93
94 public string? get_state (string key)
95@@ -456,6 +443,53 @@
96 stderr.printf ("[%+.2fs] %s %s\n", log_timer.elapsed (), prefix, message);
97 }
98
99+ private void xsettings_ready_cb ()
100+ {
101+ /* Prepare to set the background */
102+ debug ("Creating background surface");
103+ background_surface = create_root_surface (Gdk.Screen.get_default ());
104+
105+ main_window = new MainWindow ();
106+
107+ Bus.own_name (BusType.SESSION, "com.canonical.UnityGreeter", BusNameOwnerFlags.NONE);
108+
109+ dbus_object = new DialogDBusInterface ();
110+ dbus_object.open_dialog.connect ((type) =>
111+ {
112+ ShutdownDialogType dialog_type;
113+ switch (type)
114+ {
115+ default:
116+ case 1:
117+ dialog_type = ShutdownDialogType.LOGOUT;
118+ break;
119+ case 2:
120+ dialog_type = ShutdownDialogType.RESTART;
121+ break;
122+ }
123+ main_window.show_shutdown_dialog (dialog_type);
124+ });
125+ dbus_object.close_dialog.connect ((type) => { main_window.close_shutdown_dialog (); });
126+ Bus.own_name (BusType.SESSION, "com.canonical.Unity", BusNameOwnerFlags.NONE,
127+ (c) =>
128+ {
129+ try
130+ {
131+ c.register_object ("/org/gnome/SessionManager/EndSessionDialog", dbus_object);
132+ }
133+ catch (Error e)
134+ {
135+ warning ("Failed to register /org/gnome/SessionManager/EndSessionDialog: %s", e.message);
136+ }
137+ },
138+ null,
139+ () => debug ("Failed to acquire name com.canonical.Unity"));
140+
141+ start_fake_wm ();
142+ Gdk.threads_add_idle (ready_cb);
143+ greeter_ready ();
144+ }
145+
146 public static int main (string[] args)
147 {
148 /* Protect memory from being paged to disk, as we deal with passwords */
149@@ -570,8 +604,11 @@
150 debug ("Creating Unity Greeter");
151 var greeter = new UnityGreeter (do_test_mode);
152
153- debug ("Showing greeter");
154- greeter.show ();
155+ greeter.greeter_ready.connect (() => {
156+ debug ("Showing greeter");
157+ greeter.show ();
158+ });
159+
160
161 if (!do_test_mode)
162 {
163@@ -664,3 +701,10 @@
164 close_dialog ();
165 }
166 }
167+
168+[DBus (name="org.gnome.SettingsDaemon")]
169+private interface SettingsDaemonDBusInterface : Object
170+{
171+ public signal void plugin_activated (string name);
172+ public signal void plugin_deactivated (string name);
173+}

Subscribers

People subscribed via source and target branches